优化前端服务器详情页排版,创建服务器订单时增加plan_price写入
This commit is contained in:
parent
a77a4dc417
commit
f9b8f6229c
@ -5,23 +5,16 @@
|
|||||||
>
|
>
|
||||||
<!-- 左侧区块:基本信息 -->
|
<!-- 左侧区块:基本信息 -->
|
||||||
<div class="col-span-1 space-y-5">
|
<div class="col-span-1 space-y-5">
|
||||||
<!-- 服务器状态卡片 -->
|
<!-- 当前套餐卡片 -->
|
||||||
<div class="rounded-md border">
|
<div class="rounded-md border">
|
||||||
<div class="h-12 border-b px-5 py-4">
|
<div class="h-12 border-b px-5 py-4">
|
||||||
<h2 class="text-lg font-medium text-gray-900">服务器状态</h2>
|
<h2 class="text-lg font-medium text-gray-900">当前套餐</h2>
|
||||||
</div>
|
</div>
|
||||||
<div class="p-5">
|
<div class="p-5">
|
||||||
<div class="flex h-full flex-col sm:flex-row sm:items-center sm:justify-between">
|
<div class="flex h-full flex-col sm:flex-row sm:items-center sm:justify-between">
|
||||||
<div class="mb-4 sm:mb-0">
|
<div class="mb-4 sm:mb-0">
|
||||||
<div class="flex items-center">
|
<div v-if="$jsiteServer.pg.plan_price" class="text-lg font-bold text-green-600">
|
||||||
<span class="text-base font-medium text-gray-900">
|
¥{{ $jsiteServer.pg.plan_price }}/月
|
||||||
{{ getStatusText($jsiteServer.pg.status) }}
|
|
||||||
</span>
|
|
||||||
<Badge
|
|
||||||
:label="getStatusText($jsiteServer.pg.status)"
|
|
||||||
:variant="getStatusVariant($jsiteServer.pg.status)"
|
|
||||||
class="ml-2"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div v-if="$jsiteServer.pg.end_date" class="mt-2 inline-flex items-center rounded-full bg-amber-50 px-4 py-2 text-sm font-medium text-amber-800">
|
<div v-if="$jsiteServer.pg.end_date" class="mt-2 inline-flex items-center rounded-full bg-amber-50 px-4 py-2 text-sm font-medium text-amber-800">
|
||||||
@ -31,18 +24,11 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="flex gap-2">
|
<div class="flex gap-2">
|
||||||
<Button
|
<Button
|
||||||
v-if="$jsiteServer.pg.status === 'Running'"
|
@click="renewServer"
|
||||||
@click="rebootServer"
|
:loading="$jsiteServer.renew?.loading"
|
||||||
:loading="$jsiteServer.reboot.loading"
|
class="px-5 !bg-[#1fc76f] !hover:bg-[#1bb85f] !text-white"
|
||||||
class="px-5 !bg-orange-500 !hover:bg-orange-600 !text-white"
|
|
||||||
>
|
>
|
||||||
重启
|
续费
|
||||||
</Button>
|
|
||||||
<Button
|
|
||||||
@click="renameServer"
|
|
||||||
class="bg-gray-100 text-gray-700 hover:bg-gray-200"
|
|
||||||
>
|
|
||||||
重命名
|
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -87,22 +73,22 @@
|
|||||||
<h2 class="text-lg font-medium text-gray-900">服务器配置</h2>
|
<h2 class="text-lg font-medium text-gray-900">服务器配置</h2>
|
||||||
</div>
|
</div>
|
||||||
<div class="p-5">
|
<div class="p-5">
|
||||||
<div class="grid grid-cols-2 gap-4">
|
<div class="space-y-3">
|
||||||
<div class="text-center">
|
<div class="flex justify-between items-center">
|
||||||
<div class="text-2xl font-bold text-blue-600">{{ $jsiteServer.pg.cpu || '未知' }}</div>
|
<span class="text-gray-600">CPU核心:</span>
|
||||||
<div class="text-sm text-gray-600">CPU核心</div>
|
<span class="text-lg font-semibold text-blue-600">{{ $jsiteServer.pg.cpu || '未知' }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="text-center">
|
<div class="flex justify-between items-center">
|
||||||
<div class="text-2xl font-bold text-green-600">{{ $jsiteServer.pg.memory || '未知' }}GB</div>
|
<span class="text-gray-600">内存:</span>
|
||||||
<div class="text-sm text-gray-600">内存</div>
|
<span class="text-lg font-semibold text-green-600">{{ $jsiteServer.pg.memory || '未知' }}GB</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="text-center">
|
<div class="flex justify-between items-center">
|
||||||
<div class="text-2xl font-bold text-purple-600">{{ $jsiteServer.pg.disk_size || '未知' }}GB</div>
|
<span class="text-gray-600">磁盘:</span>
|
||||||
<div class="text-sm text-gray-600">磁盘</div>
|
<span class="text-lg font-semibold text-purple-600">{{ $jsiteServer.pg.disk_size || '未知' }}GB</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="text-center">
|
<div class="flex justify-between items-center">
|
||||||
<div class="text-2xl font-bold text-orange-600">{{ $jsiteServer.pg.bandwidth || '未知' }}Mbps</div>
|
<span class="text-gray-600">带宽:</span>
|
||||||
<div class="text-sm text-gray-600">带宽</div>
|
<span class="text-lg font-semibold text-orange-600">{{ $jsiteServer.pg.bandwidth || '未知' }}Mbps</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -128,9 +114,17 @@
|
|||||||
<span class="font-mono text-gray-900">{{ $jsiteServer.pg.ssh_user || 'root' }}</span>
|
<span class="font-mono text-gray-900">{{ $jsiteServer.pg.ssh_user || 'root' }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex justify-between">
|
<div class="flex justify-between">
|
||||||
<span class="text-gray-600">密钥对:</span>
|
<span class="text-gray-600">服务器密码:</span>
|
||||||
|
<span class="font-mono text-gray-900">{{ $jsiteServer.pg.password || '未设置' }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="flex justify-between">
|
||||||
|
<span class="text-gray-600">密钥对名称:</span>
|
||||||
<span class="font-mono text-gray-900">{{ $jsiteServer.pg.key_pair_name || '未设置' }}</span>
|
<span class="font-mono text-gray-900">{{ $jsiteServer.pg.key_pair_name || '未设置' }}</span>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="flex justify-between">
|
||||||
|
<span class="text-gray-600">私钥:</span>
|
||||||
|
<span class="font-mono text-gray-900">{{ $jsiteServer.pg.private_key || '未设置' }}</span>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -178,20 +172,47 @@ export default {
|
|||||||
};
|
};
|
||||||
return variantMap[status] || 'default';
|
return variantMap[status] || 'default';
|
||||||
},
|
},
|
||||||
rebootServer() {
|
getRegionText(region) {
|
||||||
|
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': '韩国(首尔)'
|
||||||
|
};
|
||||||
|
return regionMap[region] || region;
|
||||||
|
},
|
||||||
|
renewServer() {
|
||||||
toast.promise(
|
toast.promise(
|
||||||
this.$jsiteServer.reboot.submit(),
|
this.$jsiteServer.renew?.submit() || Promise.resolve(),
|
||||||
{
|
{
|
||||||
loading: '正在重启服务器...',
|
loading: '正在处理续费请求...',
|
||||||
success: '服务器重启命令已发送',
|
success: '续费请求已提交',
|
||||||
error: (e) => getToastErrorMessage(e),
|
error: (e) => getToastErrorMessage(e),
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
renameServer() {
|
|
||||||
// 这里可以实现重命名功能
|
|
||||||
toast.info('重命名功能待实现');
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
serverInformation() {
|
serverInformation() {
|
||||||
@ -205,29 +226,17 @@ export default {
|
|||||||
value: this.$jsiteServer.pg?.instance_id || '未分配',
|
value: this.$jsiteServer.pg?.instance_id || '未分配',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: '订单ID',
|
label: '状态',
|
||||||
value: this.$jsiteServer.pg?.order_id || '未分配',
|
value: this.getStatusText(this.$jsiteServer.pg?.status),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: '区域',
|
label: '区域',
|
||||||
value: this.$jsiteServer.pg?.region || '未知',
|
value: this.getRegionText(this.$jsiteServer.pg?.region),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: '系统',
|
label: '系统',
|
||||||
value: this.$jsiteServer.pg?.system || '未知',
|
value: this.$jsiteServer.pg?.system || '未知',
|
||||||
},
|
},
|
||||||
{
|
|
||||||
label: '套餐ID',
|
|
||||||
value: this.$jsiteServer.pg?.planid || '未知',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: '镜像ID',
|
|
||||||
value: this.$jsiteServer.pg?.image_id || '未知',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: '购买时长',
|
|
||||||
value: this.$jsiteServer.pg?.period ? `${this.$jsiteServer.pg.period}个月` : '未知',
|
|
||||||
},
|
|
||||||
];
|
];
|
||||||
},
|
},
|
||||||
$jsiteServer() {
|
$jsiteServer() {
|
||||||
|
|||||||
@ -794,6 +794,7 @@ def create_server_order(**kwargs):
|
|||||||
"title": f"{region_id} - {selected_plan.get('core')}核/{selected_plan.get('memory')}GB",
|
"title": f"{region_id} - {selected_plan.get('core')}核/{selected_plan.get('memory')}GB",
|
||||||
"planid": plan_id,
|
"planid": plan_id,
|
||||||
"period": period,
|
"period": period,
|
||||||
|
"plan_price": monthly_price,
|
||||||
"cpu": selected_plan.get('core'),
|
"cpu": selected_plan.get('core'),
|
||||||
"memory": selected_plan.get('memory'),
|
"memory": selected_plan.get('memory'),
|
||||||
"disk_size": selected_plan.get('disk_size'),
|
"disk_size": selected_plan.get('disk_size'),
|
||||||
|
|||||||
@ -12,18 +12,19 @@
|
|||||||
"order_id",
|
"order_id",
|
||||||
"server_section",
|
"server_section",
|
||||||
"instance_id",
|
"instance_id",
|
||||||
|
"planid",
|
||||||
"cpu",
|
"cpu",
|
||||||
"disk_size",
|
"disk_size",
|
||||||
"region",
|
"region",
|
||||||
"image_id",
|
"system",
|
||||||
"planid",
|
"period",
|
||||||
"column_break_aliyun",
|
"column_break_aliyun",
|
||||||
"end_date",
|
"end_date",
|
||||||
|
"plan_price",
|
||||||
"memory",
|
"memory",
|
||||||
"bandwidth",
|
"bandwidth",
|
||||||
"public_ip",
|
"public_ip",
|
||||||
"system",
|
"image_id",
|
||||||
"period",
|
|
||||||
"ssh_section",
|
"ssh_section",
|
||||||
"ssh_user",
|
"ssh_user",
|
||||||
"ssh_port",
|
"ssh_port",
|
||||||
@ -193,11 +194,16 @@
|
|||||||
"fieldname": "key_pair_name",
|
"fieldname": "key_pair_name",
|
||||||
"fieldtype": "Data",
|
"fieldtype": "Data",
|
||||||
"label": "密钥对名称"
|
"label": "密钥对名称"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldname": "plan_price",
|
||||||
|
"fieldtype": "Int",
|
||||||
|
"label": "套餐价格(元/月)"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"index_web_pages_for_search": 1,
|
"index_web_pages_for_search": 1,
|
||||||
"links": [],
|
"links": [],
|
||||||
"modified": "2025-07-28 20:45:29.493153",
|
"modified": "2025-07-29 18:37:36.194789",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Jcloud",
|
"module": "Jcloud",
|
||||||
"name": "Jsite Server",
|
"name": "Jsite Server",
|
||||||
|
|||||||
@ -25,6 +25,7 @@ class JsiteServer(Document):
|
|||||||
order_id: DF.Data | None
|
order_id: DF.Data | None
|
||||||
password: DF.Password | None
|
password: DF.Password | None
|
||||||
period: DF.Int
|
period: DF.Int
|
||||||
|
plan_price: DF.Int
|
||||||
planid: DF.Data | None
|
planid: DF.Data | None
|
||||||
private_key: DF.Text | None
|
private_key: DF.Text | None
|
||||||
public_ip: DF.Data | None
|
public_ip: DF.Data | None
|
||||||
@ -52,7 +53,11 @@ class JsiteServer(Document):
|
|||||||
"order_id",
|
"order_id",
|
||||||
"planid",
|
"planid",
|
||||||
"image_id",
|
"image_id",
|
||||||
"system"
|
"system",
|
||||||
|
"plan_price",
|
||||||
|
"key_pair_name",
|
||||||
|
"private_key",
|
||||||
|
"password"
|
||||||
)
|
)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user