@xen-orchestra/web-core 0.54.0 → 0.56.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/components/button-group/VtsButtonGroup.vue +11 -1
- package/lib/components/card-object-title/VtsCardObjectTitle.vue +36 -0
- package/lib/components/code-snippet/VtsCodeSnippet.vue +11 -5
- package/lib/components/drawer/VtsDrawer.vue +89 -0
- package/lib/components/drawer/VtsDrawerButton.vue +22 -0
- package/lib/components/drawer/VtsDrawerCancelButton.vue +33 -0
- package/lib/components/drawer/VtsDrawerConfirmButton.vue +32 -0
- package/lib/components/drawer/VtsDrawerList.vue +34 -0
- package/lib/components/icon/VtsIcon.vue +3 -1
- package/lib/components/layout/VtsContentSidePanel.vue +41 -0
- package/lib/components/layout/VtsLayoutSidebar.vue +5 -2
- package/lib/components/menu/VtsActionsMenu.vue +37 -3
- package/lib/components/modal/VtsModalButton.vue +0 -1
- package/lib/components/operation-card/VtsOperationCard.vue +2 -1
- package/lib/components/panel/VtsPanel.vue +80 -0
- package/lib/components/panel/VtsSidePanel.vue +140 -0
- package/lib/components/query-builder/VtsQueryBuilderModal.vue +0 -1
- package/lib/components/select/VtsSelect.vue +1 -0
- package/lib/components/state-hero/VtsStateHero.vue +26 -24
- package/lib/components/table/VtsTable.vue +2 -1
- package/lib/components/table/cells/VtsActionCell.vue +7 -0
- package/lib/components/table/cells/VtsHeaderCell.vue +1 -17
- package/lib/components/table/cells/VtsLinkCell.vue +3 -1
- package/lib/components/table/cells/VtsTagCell.vue +4 -2
- package/lib/components/tree/VtsTreeItem.vue +9 -3
- package/lib/components/tree/VtsTreeList.vue +6 -3
- package/lib/components/tree/VtsTreeLoadingItem.vue +3 -3
- package/lib/components/ui/drawer/UiDrawer.vue +123 -0
- package/lib/components/ui/head-bar/UiHeadBar.vue +1 -1
- package/lib/components/ui/input/UiInput.vue +3 -1
- package/lib/components/ui/link/UiLink.vue +3 -1
- package/lib/components/ui/modal/UiModal.vue +10 -18
- package/lib/components/ui/panel/UiPanel.vue +7 -24
- package/lib/components/ui/tree-item-label/UiTreeItemLabel.vue +1 -1
- package/lib/composables/default-tab.composable.ts +4 -0
- package/lib/composables/table-state.composable.ts +1 -1
- package/lib/icons/action-icons.ts +20 -2
- package/lib/icons/custom-icons.ts +16 -0
- package/lib/icons/object-icons.ts +33 -18
- package/lib/locales/cs.json +110 -11
- package/lib/locales/da.json +1 -3
- package/lib/locales/de.json +1 -12
- package/lib/locales/en.json +76 -12
- package/lib/locales/es.json +15 -6
- package/lib/locales/fa.json +0 -1
- package/lib/locales/fr.json +76 -12
- package/lib/locales/it.json +0 -1
- package/lib/locales/ko.json +0 -2
- package/lib/locales/nb-NO.json +18 -20
- package/lib/locales/nl.json +0 -11
- package/lib/locales/pt-BR.json +0 -4
- package/lib/locales/pt.json +0 -4
- package/lib/locales/ru.json +0 -1
- package/lib/locales/sk.json +110 -11
- package/lib/locales/sv.json +2 -13
- package/lib/locales/uk.json +0 -1
- package/lib/locales/zh-Hans.json +79 -16
- package/lib/packages/drawer/DrawerProvider.vue +17 -0
- package/lib/packages/drawer/README.md +189 -0
- package/lib/packages/drawer/create-drawer-opener.ts +119 -0
- package/lib/packages/drawer/drawer.store.ts +22 -0
- package/lib/packages/drawer/types.ts +93 -0
- package/lib/packages/drawer/use-drawer.ts +53 -0
- package/lib/packages/modal/create-modal-opener.ts +12 -10
- package/lib/packages/remote-resource/define-remote-resource.ts +64 -29
- package/lib/packages/tree/types.ts +6 -0
- package/lib/packages/tree/use-tree.ts +38 -37
- package/lib/stores/panel.store.ts +56 -5
- package/lib/tables/column-definitions/action-column.ts +22 -10
- package/lib/tables/column-definitions/address-column.ts +1 -1
- package/lib/tables/column-definitions/button-column.ts +1 -1
- package/lib/tables/column-definitions/button-icon-column.ts +1 -1
- package/lib/tables/column-definitions/collapsed-list-column.ts +1 -1
- package/lib/tables/column-definitions/date-column.ts +1 -1
- package/lib/tables/column-definitions/double-link-column.ts +1 -1
- package/lib/tables/column-definitions/info-column.ts +1 -1
- package/lib/tables/column-definitions/input-column.ts +1 -5
- package/lib/tables/column-definitions/link-column.ts +1 -1
- package/lib/tables/column-definitions/link-or-text-column.ts +1 -1
- package/lib/tables/column-definitions/literal-column.ts +1 -1
- package/lib/tables/column-definitions/number-column.ts +1 -1
- package/lib/tables/column-definitions/percent-column.ts +1 -1
- package/lib/tables/column-definitions/progress-bar-column.ts +1 -1
- package/lib/tables/column-definitions/select-column.ts +1 -1
- package/lib/tables/column-definitions/status-column.ts +2 -2
- package/lib/tables/column-definitions/tag-column.ts +3 -2
- package/lib/tables/column-definitions/text-column.ts +1 -1
- package/lib/tables/column-definitions/truncated-text-column.ts +1 -1
- package/lib/tables/column-sets/backup-job-schedule-columns.ts +2 -2
- package/lib/tables/column-sets/backup-log-columns.ts +1 -1
- package/lib/tables/column-sets/new-vm-network-columns.ts +0 -2
- package/lib/tables/column-sets/new-vm-sr-columns.ts +0 -1
- package/lib/tables/column-sets/server-columns.ts +1 -1
- package/lib/tables/column-sets/snapshot-columns.ts +1 -1
- package/lib/tables/column-sets/sr-columns.ts +2 -2
- package/lib/tables/column-sets/traffic-rules-columns.ts +5 -7
- package/lib/tables/column-sets/vif-network-columns.ts +24 -0
- package/lib/tables/column-sets/vm-columns.ts +2 -3
- package/lib/tables/helpers/render-head-cell.ts +2 -4
- package/lib/tables/types.ts +0 -2
- package/lib/types/connection.ts +14 -0
- package/lib/types/state-hero.type.ts +19 -0
- package/lib/types/storage-repository.type.ts +14 -0
- package/lib/types/vue-virtual-scroller.d.ts +8 -2
- package/lib/utils/injection-keys.util.ts +1 -1
- package/lib/utils/sr.utils.ts +34 -0
- package/package.json +4 -4
package/lib/locales/zh-Hans.json
CHANGED
|
@@ -15,12 +15,14 @@
|
|
|
15
15
|
"action:add-network-in-xo-5": "在XO5中添加网络",
|
|
16
16
|
"action:add-sort": "添加排序条件",
|
|
17
17
|
"action:add-vifs-in-xo-5": "在XO5中添加虚拟网卡",
|
|
18
|
+
"action:attach": "挂载",
|
|
19
|
+
"action:attach-vdi": "@:attach-vdi",
|
|
18
20
|
"action:boot-vm": "启动虚拟机",
|
|
19
21
|
"action:change-state": "修改状态",
|
|
20
22
|
"action:close": "关闭",
|
|
21
23
|
"action:connect": "连接",
|
|
22
24
|
"action:connect-another-pool": "连接其他资源池",
|
|
23
|
-
"action:connect-n-vbds": "连接1
|
|
25
|
+
"action:connect-n-vbds": "连接1个VBD | 连接{n}个VBD",
|
|
24
26
|
"action:connect-n-vifs": "连接1个虚拟网卡 | 连接{n}个虚拟网卡",
|
|
25
27
|
"action:connect-pool": "连接资源池",
|
|
26
28
|
"action:copy": "复制",
|
|
@@ -32,20 +34,20 @@
|
|
|
32
34
|
"action:create-bonded-network": "创建聚合网络",
|
|
33
35
|
"action:create-internal-network": "创建内网",
|
|
34
36
|
"action:create-network": "创建网络",
|
|
37
|
+
"action:create-traffic-rule": "创建流量规则",
|
|
38
|
+
"action:create-vdi": "创建VDI",
|
|
35
39
|
"action:delete": "删除",
|
|
36
40
|
"action:delete-filter": "删除筛选条件",
|
|
37
41
|
"action:delete-group": "删除分组",
|
|
38
42
|
"action:delete-n-networks": "删除1个网络 | 删除{n}个网络",
|
|
39
43
|
"action:delete-n-snapshots": "删除1个快照 | 删除{n}个快照",
|
|
40
|
-
"action:delete-n-vbds": "删除1个虚拟块设备 | 删除{n}个虚拟块设备",
|
|
41
44
|
"action:delete-n-vdis": "删除1个虚拟磁盘 | 删除{n}个虚拟磁盘",
|
|
42
45
|
"action:delete-n-vifs": "删除1个虚拟网卡 | 删除{n}个虚拟网卡",
|
|
43
46
|
"action:delete-n-vms": "删除1台虚拟机 | 删除{n}台虚拟机",
|
|
44
|
-
"action:delete-vbd": "删除虚拟块设备",
|
|
45
47
|
"action:deploy": "部署",
|
|
46
48
|
"action:deploy-xoa": "部署XOA",
|
|
47
49
|
"action:disconnect": "断开连接",
|
|
48
|
-
"action:disconnect-n-vbds": "断开1
|
|
50
|
+
"action:disconnect-n-vbds": "断开1个VBD | 断开{n}个VBD",
|
|
49
51
|
"action:disconnect-n-vifs": "断开1个虚拟网卡 | 断开{n}个虚拟网卡",
|
|
50
52
|
"action:download-bugtools-archive": "下载故障排查工具包",
|
|
51
53
|
"action:duplicate": "克隆",
|
|
@@ -82,6 +84,8 @@
|
|
|
82
84
|
"action:reboot": "重启",
|
|
83
85
|
"action:reformat": "重新格式化",
|
|
84
86
|
"action:resume": "恢复运行",
|
|
87
|
+
"action:revert-to-snapshot": "回滚至快照",
|
|
88
|
+
"action:revert-vm-here": "在此主机还原虚拟机快照",
|
|
85
89
|
"action:save": "保存",
|
|
86
90
|
"action:search": "搜索",
|
|
87
91
|
"action:search-treeview": "树形列表搜索",
|
|
@@ -134,6 +138,7 @@
|
|
|
134
138
|
"all-done!": "全部完成!",
|
|
135
139
|
"all-good!": "一切正常!",
|
|
136
140
|
"all-quiet-launchpad": "系统运行平稳",
|
|
141
|
+
"allocated-space": "已分配容量",
|
|
137
142
|
"allow": "允许",
|
|
138
143
|
"allow-self-signed-ssl": "请在浏览器中允许自签名SSL证书",
|
|
139
144
|
"and": "并且",
|
|
@@ -144,6 +149,9 @@
|
|
|
144
149
|
"appearance": "外观设置",
|
|
145
150
|
"aria:breadcrumb:label": "面包屑导航",
|
|
146
151
|
"ascending": "升序",
|
|
152
|
+
"attach-vdi": "挂载已有VDI",
|
|
153
|
+
"attach-vdi:error-message": "挂载VDI时发生错误。请检查存储库、VDI、读写模式配置,确认虚拟机状态后重试。",
|
|
154
|
+
"attaching-vdi": "正在挂载VDI",
|
|
147
155
|
"auto-generated": "自动生成",
|
|
148
156
|
"auto-power": "自动启停",
|
|
149
157
|
"available": "可用",
|
|
@@ -187,7 +195,6 @@
|
|
|
187
195
|
"backups:vms-protection:active-protected": "已加入有效任务并受保护",
|
|
188
196
|
"backups:vms-protection:active-unprotected": "已加入有效任务但未受保护",
|
|
189
197
|
"backups:vms-protection:no-active-job": "未加入任何有效任务",
|
|
190
|
-
"backups:vms-protection:no-job": "未加入任何备份任务",
|
|
191
198
|
"backups:vms-protection:protected": "已加入任务并受保护",
|
|
192
199
|
"backups:vms-protection:tooltip": "虚拟机加入启用定时的备份任务且最近执行成功即为受保护",
|
|
193
200
|
"backups:vms-protection:unprotected": "已加入任务但未受保护",
|
|
@@ -198,6 +205,7 @@
|
|
|
198
205
|
"bond-mode": "聚合模式",
|
|
199
206
|
"bond-status": "聚合状态",
|
|
200
207
|
"boot-firmware": "启动固件",
|
|
208
|
+
"bootable": "可引导启动",
|
|
201
209
|
"build-number": "编译版本号",
|
|
202
210
|
"by": "依据",
|
|
203
211
|
"bytes:gi": "吉字节",
|
|
@@ -206,10 +214,12 @@
|
|
|
206
214
|
"cancel": "取消",
|
|
207
215
|
"cbt-destroy-snapshot-data": "使用变更块追踪时清理快照数据",
|
|
208
216
|
"change-block-tracking": "变更块追踪(CBT)",
|
|
209
|
-
"character-limit": "
|
|
217
|
+
"character-limit": "{count}/{max}个字符 | {count}/{max}个字符",
|
|
210
218
|
"check-errors:": "查看错误信息:",
|
|
211
219
|
"check-summing": "发送端校验和",
|
|
212
220
|
"checkpoint-snapshot": "检查点快照",
|
|
221
|
+
"choose-network": "选择网络",
|
|
222
|
+
"choose-vif": "选择VIF",
|
|
213
223
|
"click-to-display-alarms:": "点击查看告警:",
|
|
214
224
|
"click-to-return-default-pool": "点击返回默认资源池",
|
|
215
225
|
"cloud-config": "云端配置",
|
|
@@ -225,6 +235,7 @@
|
|
|
225
235
|
"configure-in-xo-5": "前往XO5配置",
|
|
226
236
|
"confirm-cancel?": "确定取消当前操作吗?",
|
|
227
237
|
"confirm-delete": "即将删除{0}",
|
|
238
|
+
"confirm-vm-revert": "确认还原虚拟机快照",
|
|
228
239
|
"connect": "连接",
|
|
229
240
|
"connected": "已连接",
|
|
230
241
|
"connected-to-ip": "已连接至 {ip}",
|
|
@@ -254,9 +265,12 @@
|
|
|
254
265
|
"cpu-weight": "CPU权重",
|
|
255
266
|
"cpus": "处理器数量",
|
|
256
267
|
"crash-dump-storage-repository": "故障转储存储仓库",
|
|
268
|
+
"create-new-vdi": "新建VDI",
|
|
257
269
|
"created-by": "创建人",
|
|
258
270
|
"created-on": "创建时间",
|
|
259
271
|
"creating-new-network": "正在创建新网络",
|
|
272
|
+
"creating-new-traffic-rule": "正在创建流量规则",
|
|
273
|
+
"creating-new-vdi": "正在创建VDI",
|
|
260
274
|
"creation-date": "创建日期",
|
|
261
275
|
"cron-pattern": "定时表达式",
|
|
262
276
|
"current": "当前",
|
|
@@ -285,6 +299,13 @@
|
|
|
285
299
|
"device-config": "设备配置",
|
|
286
300
|
"dhcp": "自动获取IP",
|
|
287
301
|
"direction": "传输方向",
|
|
302
|
+
"direction-and": "并且",
|
|
303
|
+
"direction-between": "双向",
|
|
304
|
+
"direction-from": "源地址",
|
|
305
|
+
"direction-from-and-to": "双向收发",
|
|
306
|
+
"direction-from-to": "源至目标单向",
|
|
307
|
+
"direction-on": "绑定端口",
|
|
308
|
+
"direction-to": "目标地址",
|
|
288
309
|
"disabled": "已禁用",
|
|
289
310
|
"disconnect-vifs-in-xo-5-to-delete-network": "删除网络前需断开所有关联虚拟网卡,可在{xo-5}中管理。",
|
|
290
311
|
"disconnected": "已断开",
|
|
@@ -300,6 +321,7 @@
|
|
|
300
321
|
"done": "完成",
|
|
301
322
|
"drop": "丢弃",
|
|
302
323
|
"duration": "时长",
|
|
324
|
+
"empty": "空",
|
|
303
325
|
"enabled": "已启用",
|
|
304
326
|
"end-date": "结束日期",
|
|
305
327
|
"end-of-life": "生命周期终止",
|
|
@@ -320,16 +342,23 @@
|
|
|
320
342
|
"fast-clone": "快速克隆",
|
|
321
343
|
"fetching-fresh-data": "正在获取实时数据",
|
|
322
344
|
"field:exceeds-max-characters": "输入内容不可超过{max}个字符。",
|
|
345
|
+
"file": "文件",
|
|
323
346
|
"filter-actions": "筛选操作",
|
|
324
347
|
"following-hosts-unreachable": "以下主机无法连通",
|
|
325
348
|
"for-backup": "用于备份",
|
|
326
349
|
"for-replication": "用于数据复制",
|
|
327
350
|
"force-reboot-blocked": "禁止强制重启",
|
|
328
351
|
"force-shutdown-blocked": "禁止强制关机",
|
|
352
|
+
"form:error:field-required": "{field}为必填项",
|
|
353
|
+
"form:error:integer": "必须填写整数",
|
|
354
|
+
"form:error:required": "此字段不能为空",
|
|
355
|
+
"form:warning:out-of-range": "数值范围应在{min}至{max}之间",
|
|
329
356
|
"format": "格式化",
|
|
330
357
|
"free-space": "剩余空间",
|
|
358
|
+
"from-vm": "来源虚拟机",
|
|
331
359
|
"fullscreen": "全屏模式",
|
|
332
360
|
"gateway": "网关",
|
|
361
|
+
"general": "常规",
|
|
333
362
|
"general-information": "基本信息",
|
|
334
363
|
"gpu": "显卡",
|
|
335
364
|
"gpus": "显卡列表",
|
|
@@ -361,6 +390,7 @@
|
|
|
361
390
|
"in-progress": "进行中",
|
|
362
391
|
"included": "已包含",
|
|
363
392
|
"info": "信息",
|
|
393
|
+
"info:vdi-attached-rw": "该VDI已以读写模式挂载至其他虚拟机。",
|
|
364
394
|
"infos": "详情信息",
|
|
365
395
|
"install-settings": "安装配置",
|
|
366
396
|
"installed": "已安装",
|
|
@@ -369,6 +399,9 @@
|
|
|
369
399
|
"interrupted": "任务中断",
|
|
370
400
|
"invalid-field": "输入内容无效",
|
|
371
401
|
"ip-address": "IP地址",
|
|
402
|
+
"ip-address-info": "规则支持单IP或CIDR子网格式。示例:192.168.1.10、10.20.0.0/16",
|
|
403
|
+
"ip-address-invalid": "IP地址格式错误。",
|
|
404
|
+
"ip-address-required": "IP地址为必填项。",
|
|
372
405
|
"ip-addresses": "多组IP地址",
|
|
373
406
|
"ip-mode": "IP获取方式",
|
|
374
407
|
"ip-port-placeholder": "地址[:端口]",
|
|
@@ -382,18 +415,28 @@
|
|
|
382
415
|
"iso-dvd": "ISO镜像/光驱",
|
|
383
416
|
"job": "后台任务",
|
|
384
417
|
"job-name": "任务名称",
|
|
418
|
+
"job:arg:allocated-space-required": "必须填写分配容量",
|
|
385
419
|
"job:arg:bond-mode-required": "请选择聚合模式",
|
|
420
|
+
"job:arg:direction-required": "流量方向为必填项",
|
|
421
|
+
"job:arg:file-required": "文件路径为必填项",
|
|
386
422
|
"job:arg:host-required": "请选择目标主机",
|
|
423
|
+
"job:arg:ip-range-required": "IP地址段为必填项",
|
|
387
424
|
"job:arg:missing-payload": "缺少任务配置参数",
|
|
388
425
|
"job:arg:name-required": "请填写名称",
|
|
389
426
|
"job:arg:password-required": "请输入密码",
|
|
390
427
|
"job:arg:pif-id-required": "请选择物理网卡",
|
|
391
428
|
"job:arg:pif-ids-required": "至少选择一张物理网卡",
|
|
392
429
|
"job:arg:pool-id-required": "请选择资源池",
|
|
430
|
+
"job:arg:port-required-for-tcp-udp": "TCP/UDP协议必须填写端口",
|
|
431
|
+
"job:arg:protocol-required": "通信协议为必填项",
|
|
432
|
+
"job:arg:sr-id-required": "存储库SR ID为必填项",
|
|
393
433
|
"job:arg:sr-vdi-required": "请选择存储仓库与虚拟磁盘",
|
|
434
|
+
"job:arg:target-id-required": "目标对象ID为必填项",
|
|
394
435
|
"job:arg:template-uuid-required": "请选择虚拟机模板",
|
|
395
436
|
"job:arg:username-required": "请输入用户名",
|
|
437
|
+
"job:arg:vdi-id-required": "VDI ID为必填项",
|
|
396
438
|
"job:arg:vlan-required": "请填写VLAN编号",
|
|
439
|
+
"job:arg:vm-id-required": "虚拟机ID为必填项",
|
|
397
440
|
"job:connect:in-progress": "正在连接.…",
|
|
398
441
|
"job:create:in-progress": "正在创建.…",
|
|
399
442
|
"job:delete:in-progress": "正在删除.…",
|
|
@@ -454,6 +497,8 @@
|
|
|
454
497
|
"job:vm-shutdown:blocked-operation": "禁止关闭虚拟机",
|
|
455
498
|
"job:vm-shutdown:in-progress": "正在关闭虚拟机.…",
|
|
456
499
|
"job:vm-shutdown:missing-vm": "暂无虚拟机可关机",
|
|
500
|
+
"job:vm-snapshot-revert:in-progress": "快照回滚执行中…",
|
|
501
|
+
"job:vm-snapshot-revert:missing-snapshot": "无可用快照用于回滚",
|
|
457
502
|
"job:vm-snapshot:in-progress": "正在创建快照.…",
|
|
458
503
|
"job:vm-snapshot:missing-vm": "暂无虚拟机可创建快照",
|
|
459
504
|
"job:vm-start-on:bad-power-state": "虚拟机必须处于关机状态",
|
|
@@ -507,7 +552,6 @@
|
|
|
507
552
|
"manual": "手动模式",
|
|
508
553
|
"manufacturer-info": "设备厂商信息",
|
|
509
554
|
"master": "主控主机",
|
|
510
|
-
"maximum-cpu-limit": "CPU最大上限",
|
|
511
555
|
"maximum-dynamic-memory": "动态内存最大值",
|
|
512
556
|
"maximum-static-memory": "静态内存最大值",
|
|
513
557
|
"memory": "内存",
|
|
@@ -515,7 +559,6 @@
|
|
|
515
559
|
"merge-backups-synchronously": "同步合并备份文件",
|
|
516
560
|
"message": "消息提示",
|
|
517
561
|
"migration-compression": "虚拟机迁移压缩策略",
|
|
518
|
-
"minimum-cpu-limit": "CPU最小预留值",
|
|
519
562
|
"minimum-dynamic-memory": "动态内存最小值",
|
|
520
563
|
"minimum-static-memory": "静态内存最小值",
|
|
521
564
|
"missing-patches": "缺失系统补丁",
|
|
@@ -540,12 +583,11 @@
|
|
|
540
583
|
"multi-creation": "批量创建",
|
|
541
584
|
"multi-pathing": "多路径存储",
|
|
542
585
|
"n-bonded-networks": "1个聚合网络 | {n}个聚合网络",
|
|
543
|
-
"n-cpus": "1颗处理器 | {n}颗处理器",
|
|
544
586
|
"n-gb": "{n}GB",
|
|
545
587
|
"n-gb-left": "剩余{n}GB空间",
|
|
546
588
|
"n-gb-required": "需要{n}GB存储空间",
|
|
547
589
|
"n-hosts": "1台主机 | {n}台主机",
|
|
548
|
-
"n-hosts-awaiting-patch": "{n}
|
|
590
|
+
"n-hosts-awaiting-patch": "{n}台主机等待安装此补丁 | {n}台主机等待安装此补丁",
|
|
549
591
|
"n-internal-networks": "1个内网 | {n}个内网",
|
|
550
592
|
"n-missing": "缺失{n}项",
|
|
551
593
|
"n-networks": "1个网络 | {n}个网络",
|
|
@@ -566,8 +608,10 @@
|
|
|
566
608
|
"network-config": "网络配置",
|
|
567
609
|
"network-create:warning:mtu-out-of-range": "MTU取值范围:{min}-{max}",
|
|
568
610
|
"network-create:warning:vlan-out-of-range": "VLAN取值范围:0-{max}",
|
|
611
|
+
"network-default": "默认网络",
|
|
569
612
|
"network-download": "下载速率",
|
|
570
613
|
"network-information": "网络详情",
|
|
614
|
+
"network-required": "必须选择网络。",
|
|
571
615
|
"network-throughput": "网络吞吐量",
|
|
572
616
|
"network-upload": "上传速率",
|
|
573
617
|
"networking": "网络管理",
|
|
@@ -580,6 +624,11 @@
|
|
|
580
624
|
"new-network:creation-in-progress-message": "网络创建任务已后台运行,可前往{tasksPageLink}查看。",
|
|
581
625
|
"new-network:error-message": "网络创建失败,请核对配置并确认主机状态后重试。",
|
|
582
626
|
"new-network:select-interface": "选择物理网卡",
|
|
627
|
+
"new-traffic-rule:add": "新建流量防火墙规则",
|
|
628
|
+
"new-traffic-rule:error-message": "创建流量规则失败,请核对配置参数后重试。",
|
|
629
|
+
"new-vdi:accepted-formats": "支持磁盘格式:{formats}",
|
|
630
|
+
"new-vdi:add": "新建虚拟磁盘VDI",
|
|
631
|
+
"new-vdi:error-message": "创建VDI失败,请核对磁盘名称、存储库、分配容量后重试。",
|
|
583
632
|
"new-vif": "新增虚拟网卡",
|
|
584
633
|
"new-vm": "新建虚拟机",
|
|
585
634
|
"new-vm:add": "创建虚拟机",
|
|
@@ -667,7 +716,7 @@
|
|
|
667
716
|
"other-settings": "其他配置",
|
|
668
717
|
"page-not-found": "页面不存在.…",
|
|
669
718
|
"page-please-wait": "页面正在初始化,请稍候!",
|
|
670
|
-
"pagination:all": "
|
|
719
|
+
"pagination:all": "@:all",
|
|
671
720
|
"partially-connected": "部分已连接",
|
|
672
721
|
"password": "密码",
|
|
673
722
|
"password-invalid": "密码格式错误",
|
|
@@ -710,6 +759,8 @@
|
|
|
710
759
|
"popup-first-connection-introduction": "欢迎使用Xen Orchestra 6正式版。",
|
|
711
760
|
"popup-first-connection-upcoming-release": "后续版本将补齐用户管理、备份、批量操作等全部功能!",
|
|
712
761
|
"port": "端口",
|
|
762
|
+
"port-invalid": "端口格式填写错误。",
|
|
763
|
+
"port-required": "端口为必填项。",
|
|
713
764
|
"power-on-host-for-console": "开启主机后即可访问控制台",
|
|
714
765
|
"power-on-mode": "开机模式",
|
|
715
766
|
"power-on-vm-for-console": "开启虚拟机后即可访问控制台",
|
|
@@ -731,6 +782,7 @@
|
|
|
731
782
|
"public-key": "公钥",
|
|
732
783
|
"public-key-already-exists": "公钥已存在",
|
|
733
784
|
"public-key-mandatory": "必须填写公钥",
|
|
785
|
+
"pv-vms-only": "仅半虚拟化(PV)虚拟机可用。",
|
|
734
786
|
"pxe": "网络引导启动",
|
|
735
787
|
"query-builder": "查询编辑器",
|
|
736
788
|
"query-builder:label": "智能搜索器",
|
|
@@ -761,6 +813,7 @@
|
|
|
761
813
|
"ram": "运行内存",
|
|
762
814
|
"ram-provisioning": "内存资源分配",
|
|
763
815
|
"ram-usage": "内存使用率",
|
|
816
|
+
"rate-limit": "速率限制",
|
|
764
817
|
"read": "读取",
|
|
765
818
|
"read-only": "只读模式",
|
|
766
819
|
"reboot-blocked": "禁止重启",
|
|
@@ -789,6 +842,7 @@
|
|
|
789
842
|
"rest-api": "后端接口",
|
|
790
843
|
"retry": "重试",
|
|
791
844
|
"root-by-default": "默认账号root。",
|
|
845
|
+
"rule-type": "规则类型",
|
|
792
846
|
"run": "执行",
|
|
793
847
|
"running-vm": "运行中虚拟机",
|
|
794
848
|
"runs": "执行记录",
|
|
@@ -820,10 +874,13 @@
|
|
|
820
874
|
"snapshot-created-on": "快照创建时间",
|
|
821
875
|
"snapshot-delete-warning": "删除 1 个快照将造成不可逆数据丢失,该操作永久生效且无法撤销。| 批量删除 {n} 个快照将造成不可逆数据丢失,该操作永久生效且无法撤销。",
|
|
822
876
|
"snapshot-mode": "快照存储模式",
|
|
877
|
+
"snapshot-revert-snapshot-before": "回滚前先对虚拟机创建快照",
|
|
878
|
+
"snapshot-revert-warning": "此操作会将虚拟机恢复至所选快照状态,快照之后所有的数据、配置与磁盘变更都会丢失,且该操作无法撤销。",
|
|
823
879
|
"snapshots": "快照管理",
|
|
824
880
|
"sockets-with-cores-per-socket": "{nSockets}插槽 × {nCores}核心/插槽",
|
|
825
881
|
"software": "软件服务",
|
|
826
882
|
"software-tooling": "软件与运维工具",
|
|
883
|
+
"source": "源",
|
|
827
884
|
"source-backup-repository": "源端备份仓库",
|
|
828
885
|
"space": "存储空间",
|
|
829
886
|
"speed": "传输速率",
|
|
@@ -929,12 +986,15 @@
|
|
|
929
986
|
"translation-tool": "词条翻译工具",
|
|
930
987
|
"trigger": "触发条件",
|
|
931
988
|
"type": "资源类型",
|
|
989
|
+
"unable-to-attach-vdi": "无法挂载虚拟磁盘(VDI)",
|
|
932
990
|
"unable-to-connect-to": "无法连接至 {ip}",
|
|
933
991
|
"unable-to-connect-to-the-pool": "资源池连接失败",
|
|
934
992
|
"unable-to-connect-to-xo-server": "无法连接XO服务端。",
|
|
935
993
|
"unable-to-create-new-bonded-network": "聚合网络创建失败",
|
|
936
994
|
"unable-to-create-new-internal-network": "内网创建失败",
|
|
937
995
|
"unable-to-create-new-network": "网络创建失败",
|
|
996
|
+
"unable-to-create-new-traffic-rule": "无法新建流量规则",
|
|
997
|
+
"unable-to-create-new-vdi": "无法新建虚拟磁盘(VDI)",
|
|
938
998
|
"unable-to-delete-network": "网络删除失败",
|
|
939
999
|
"unknown": "未知",
|
|
940
1000
|
"unlocked": "已解锁",
|
|
@@ -944,6 +1004,7 @@
|
|
|
944
1004
|
"untitled": "无标题",
|
|
945
1005
|
"untranslated-text-helper": "未完成翻译的内容默认显示英文。",
|
|
946
1006
|
"up-to-date": "已是最新版本",
|
|
1007
|
+
"url": "地址链接 (URL)",
|
|
947
1008
|
"used": "已使用",
|
|
948
1009
|
"used-for-backup": "用于备份存储",
|
|
949
1010
|
"used-space": "已用空间",
|
|
@@ -951,16 +1012,14 @@
|
|
|
951
1012
|
"user-config": "用户自定义配置",
|
|
952
1013
|
"username": "用户名",
|
|
953
1014
|
"uuid": "唯一识别码",
|
|
954
|
-
"vbd-connect-title": "即将连接1个虚拟块设备 | 即将连接{n}个虚拟块设备",
|
|
955
|
-
"vbd-delete-info": "仅解除磁盘与虚拟机挂载关系,不会删除磁盘数据,可重新挂载。",
|
|
956
|
-
"vbd-delete-title": "即将删除1个虚拟块设备 | 即将删除{n}个虚拟块设备",
|
|
957
|
-
"vbd-disconnect-info": "虚拟机暂时无法访问该磁盘,磁盘保留挂载状态可随时重连。",
|
|
958
|
-
"vbd-disconnect-title": "即将断开1个虚拟块设备 | 即将断开{n}个虚拟块设备",
|
|
959
1015
|
"vcpu": "虚拟处理器",
|
|
960
1016
|
"vcpus": "虚拟CPU",
|
|
961
1017
|
"vcpus-assigned": "已分配虚拟CPU数量",
|
|
962
1018
|
"vdi": "虚拟磁盘",
|
|
963
1019
|
"vdi-delete-warning": "此操作将永久删除磁盘及全部数据,无法恢复。",
|
|
1020
|
+
"vdi-description": "虚拟磁盘描述(VDI描述)",
|
|
1021
|
+
"vdi-in-use": "虚拟磁盘正在占用(VDI已被使用)",
|
|
1022
|
+
"vdi-name": "虚拟磁盘名称(VDI名称)",
|
|
964
1023
|
"vdi-throughput": "虚拟磁盘读写吞吐量",
|
|
965
1024
|
"vdis": "虚拟磁盘列表",
|
|
966
1025
|
"version": "版本",
|
|
@@ -973,6 +1032,7 @@
|
|
|
973
1032
|
"vif-disconnect-info": "虚拟机断开网络访问,网卡配置保留,可重新连接。",
|
|
974
1033
|
"vif-disconnect-title": "即将断开1个虚拟网卡 | 即将断开{n}个虚拟网卡",
|
|
975
1034
|
"vif-network-info": "虚拟网卡网络信息",
|
|
1035
|
+
"vif-required": "必须配置虚拟网卡(VIF)。",
|
|
976
1036
|
"vif-status": "虚拟网卡状态",
|
|
977
1037
|
"vifs": "虚拟网卡列表",
|
|
978
1038
|
"viridian": "Windows虚拟化兼容模式",
|
|
@@ -997,6 +1057,7 @@
|
|
|
997
1057
|
"vm-protected-reboot": "该虚拟机禁止重启。",
|
|
998
1058
|
"vm-protected-shutdown": "该虚拟机禁止关机。",
|
|
999
1059
|
"vm-protected-suspend": "该虚拟机禁止休眠。",
|
|
1060
|
+
"vm-required": "虚拟机为必填项。",
|
|
1000
1061
|
"vm-running": "虚拟机运行中",
|
|
1001
1062
|
"vm-shutdown": "虚拟机已关机",
|
|
1002
1063
|
"vm-tools-missing": "未安装虚拟机配套工具",
|
|
@@ -1013,6 +1074,8 @@
|
|
|
1013
1074
|
"vms-treeview": "虚拟机树形列表",
|
|
1014
1075
|
"vtpm": "可信虚拟芯片",
|
|
1015
1076
|
"warning": "警告",
|
|
1077
|
+
"warning:vdi-already-attached": "所选虚拟磁盘已挂载至该虚拟机。",
|
|
1078
|
+
"warning:vdi-sr": "此存储库(SR)与其他虚拟磁盘所属存储库不兼容,该存储库需为共享存储,或与其他虚拟磁盘存储库部署在同一主机。",
|
|
1016
1079
|
"warnings": "警告提示",
|
|
1017
1080
|
"weblate": "在线翻译平台",
|
|
1018
1081
|
"welcome-to-xo6!": "欢迎使用XO6新版管理平台!",
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<slot />
|
|
3
|
+
</template>
|
|
4
|
+
|
|
5
|
+
<script lang="ts" setup>
|
|
6
|
+
import { IK_DRAWER, type RegisteredDrawer } from '@core/packages/drawer/types.ts'
|
|
7
|
+
import { computed, provide } from 'vue'
|
|
8
|
+
|
|
9
|
+
const { drawer } = defineProps<{
|
|
10
|
+
drawer: RegisteredDrawer
|
|
11
|
+
}>()
|
|
12
|
+
|
|
13
|
+
provide(
|
|
14
|
+
IK_DRAWER,
|
|
15
|
+
computed(() => drawer)
|
|
16
|
+
)
|
|
17
|
+
</script>
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
# Drawer System
|
|
2
|
+
|
|
3
|
+
### Drawers list component
|
|
4
|
+
|
|
5
|
+
Add `VtsDrawerList` once in your app layout. It renders all active drawers from the store.
|
|
6
|
+
|
|
7
|
+
```vue
|
|
8
|
+
<!-- App.vue -->
|
|
9
|
+
<template>
|
|
10
|
+
...
|
|
11
|
+
<VtsDrawerList />
|
|
12
|
+
</template>
|
|
13
|
+
|
|
14
|
+
<script lang="ts" setup>
|
|
15
|
+
import VtsDrawerList from '@core/components/drawer/VtsDrawerList.vue'
|
|
16
|
+
</script>
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
### Opening a drawer (`useDrawer` composable)
|
|
20
|
+
|
|
21
|
+
```ts
|
|
22
|
+
const openMyDrawer = useDrawer({
|
|
23
|
+
component: import('path/to/MyDrawer.vue'),
|
|
24
|
+
props: {
|
|
25
|
+
foo: 'Foo',
|
|
26
|
+
},
|
|
27
|
+
onConfirm: () => console.log('Confirmed!'),
|
|
28
|
+
onCancel: () => console.log('Cancelled!'),
|
|
29
|
+
})
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
```html
|
|
33
|
+
<button @click="openMyDrawer()">Open drawer</button>
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
| Property | Type | Required | Default | Description |
|
|
37
|
+
| --------------------- | ----------------------------------------------------------------- | :------: | ----------- | ------------------------------------------ |
|
|
38
|
+
| component | `Promise<Component>` | ✓ | | `import('path/to/drawer.vue')` |
|
|
39
|
+
| props | `Record<string, MaybeRef<any>>` | | `{}` | Props passed to the drawer component |
|
|
40
|
+
| onConfirm | `(...args: any[]) => TConfirmPayload \| Promise<TConfirmPayload>` | | `undefined` | Called when the drawer is confirmed |
|
|
41
|
+
| onCancel | `(...args: any[]) => TCancelPayload \| Promise<TCancelPayload>` | | `undefined` | Called when the drawer is cancelled |
|
|
42
|
+
| keepOpenOnRouteChange | `boolean` | | `false` | By default the drawer closes on navigation |
|
|
43
|
+
|
|
44
|
+
`useDrawer()` with no arguments returns the raw `openDrawer(id, config)` function for advanced use cases where you manage the drawer ID yourself.
|
|
45
|
+
|
|
46
|
+
### Drawer component
|
|
47
|
+
|
|
48
|
+
A drawer component uses `VtsDrawer` and its sub-components:
|
|
49
|
+
|
|
50
|
+
```vue
|
|
51
|
+
<!-- MyDrawer.vue -->
|
|
52
|
+
<template>
|
|
53
|
+
<VtsDrawer :dismissible>
|
|
54
|
+
<template #title>My Drawer</template>
|
|
55
|
+
<template #content>
|
|
56
|
+
<!-- your content here -->
|
|
57
|
+
</template>
|
|
58
|
+
<template #buttons>
|
|
59
|
+
<VtsDrawerCancelButton />
|
|
60
|
+
<VtsDrawerConfirmButton>Save</VtsDrawerConfirmButton>
|
|
61
|
+
</template>
|
|
62
|
+
</VtsDrawer>
|
|
63
|
+
</template>
|
|
64
|
+
|
|
65
|
+
<script lang="ts" setup>
|
|
66
|
+
import VtsDrawer from '@core/components/drawer/VtsDrawer.vue'
|
|
67
|
+
import VtsDrawerCancelButton from '@core/components/drawer/VtsDrawerCancelButton.vue'
|
|
68
|
+
import VtsDrawerConfirmButton from '@core/components/drawer/VtsDrawerConfirmButton.vue'
|
|
69
|
+
|
|
70
|
+
defineProps<{
|
|
71
|
+
dismissible?: boolean
|
|
72
|
+
// Injected by VtsDrawerList: true when this drawer is the topmost in the stack.
|
|
73
|
+
// Pass it through to VtsDrawer so only the current drawer reacts to Escape.
|
|
74
|
+
current?: boolean
|
|
75
|
+
}>()
|
|
76
|
+
</script>
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
`VtsDrawer` props:
|
|
80
|
+
|
|
81
|
+
| Prop | Type | Default | Description |
|
|
82
|
+
| ------------- | --------- | ----------- | --------------------------------------------------------- |
|
|
83
|
+
| `dismissible` | `boolean` | `false` | Allows closing via backdrop click, X button, and Escape |
|
|
84
|
+
| `isOpen` | `boolean` | `undefined` | Controls visibility externally (uncontrolled by default) |
|
|
85
|
+
| `current` | `boolean` | `undefined` | Pass through from parent props — controls Escape handling |
|
|
86
|
+
|
|
87
|
+
When `isOpen` is omitted, `VtsDrawer` manages its own visibility internally (uncontrolled mode). In controlled mode (`:is-open` provided), the `dismiss` event is emitted instead of closing automatically.
|
|
88
|
+
|
|
89
|
+
`VtsDrawerCancelButton` and `VtsDrawerConfirmButton` accept an optional `onClick` prop. When provided, the button emits a `click` event instead of triggering `onCancel`/`onConfirm`:
|
|
90
|
+
|
|
91
|
+
```vue
|
|
92
|
+
<VtsDrawerCancelButton :on-click="handleCustomCancel" />
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### Opening with arguments
|
|
96
|
+
|
|
97
|
+
```ts
|
|
98
|
+
const openMyDrawer = useDrawer((name: string) => ({
|
|
99
|
+
component: import('path/to/MyDrawer.vue'),
|
|
100
|
+
props: { name },
|
|
101
|
+
}))
|
|
102
|
+
|
|
103
|
+
openMyDrawer('John')
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### Payload and response
|
|
107
|
+
|
|
108
|
+
Payloads are fully typed based on the return type of `onConfirm` and `onCancel`:
|
|
109
|
+
|
|
110
|
+
```ts
|
|
111
|
+
const openMyDrawer = useDrawer({
|
|
112
|
+
component: import('path/to/MyDrawer.vue'),
|
|
113
|
+
onConfirm: () => 'saved',
|
|
114
|
+
onCancel: () => 'aborted',
|
|
115
|
+
})
|
|
116
|
+
|
|
117
|
+
const result = await openMyDrawer()
|
|
118
|
+
|
|
119
|
+
if (result.confirmed) {
|
|
120
|
+
result.payload // string
|
|
121
|
+
} else {
|
|
122
|
+
result.payload // string
|
|
123
|
+
}
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
If `onConfirm` or `onCancel` throws, the promise rejects with the thrown error.
|
|
127
|
+
|
|
128
|
+
### `onConfirm` and `onCancel` event args
|
|
129
|
+
|
|
130
|
+
If your drawer component defines args for `confirm` and `cancel` events, you'll get them as arguments of the `onConfirm` and `onCancel` callbacks:
|
|
131
|
+
|
|
132
|
+
```vue
|
|
133
|
+
<!-- MyDrawer.vue -->
|
|
134
|
+
<script lang="ts" setup>
|
|
135
|
+
defineEmits<{
|
|
136
|
+
confirm: [value: string]
|
|
137
|
+
cancel: []
|
|
138
|
+
}>()
|
|
139
|
+
</script>
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
```ts
|
|
143
|
+
const openMyDrawer = useDrawer({
|
|
144
|
+
component: import('path/to/MyDrawer.vue'),
|
|
145
|
+
onConfirm: (value: string) => console.log('Confirmed with', value),
|
|
146
|
+
})
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### Busy state
|
|
150
|
+
|
|
151
|
+
If `onConfirm` or `onCancel` returns a `Promise`, the buttons show a busy indicator while the promise is pending.
|
|
152
|
+
|
|
153
|
+
**Important asymmetry:**
|
|
154
|
+
|
|
155
|
+
- `onConfirm` closes the drawer **optimistically** before the async work runs. The drawer is gone before `await` settles.
|
|
156
|
+
- `onCancel` waits for the async work to complete **before** closing the drawer.
|
|
157
|
+
|
|
158
|
+
```ts
|
|
159
|
+
const openMyDrawer = useDrawer({
|
|
160
|
+
component: import('path/to/MyDrawer.vue'),
|
|
161
|
+
onConfirm: async () => {
|
|
162
|
+
await saveToServer() // drawer is already closed while this runs
|
|
163
|
+
},
|
|
164
|
+
onCancel: async () => {
|
|
165
|
+
await cleanup() // drawer stays open while this runs, then closes
|
|
166
|
+
},
|
|
167
|
+
})
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
### Aborting close
|
|
171
|
+
|
|
172
|
+
Return `ABORT_DRAWER` from `onCancel` to keep the drawer open (e.g. to show a confirmation prompt):
|
|
173
|
+
|
|
174
|
+
```ts
|
|
175
|
+
const openMyDrawer = useDrawer({
|
|
176
|
+
component: import('path/to/MyDrawer.vue'),
|
|
177
|
+
onCancel: async () => {
|
|
178
|
+
if (!hasUnsavedChanges()) {
|
|
179
|
+
return
|
|
180
|
+
}
|
|
181
|
+
const confirmed = await confirmDiscard()
|
|
182
|
+
if (!confirmed) {
|
|
183
|
+
return ABORT_DRAWER // drawer stays open
|
|
184
|
+
}
|
|
185
|
+
},
|
|
186
|
+
})
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
> **Note:** Returning `ABORT_DRAWER` from `onConfirm` does **not** keep the drawer open. The drawer is closed optimistically before `onConfirm` runs. Returning `ABORT_DRAWER` permanently prevents the promise from resolving — avoid it in `onConfirm`.
|