diff --git a/src/components/AutoDataForm/index.vue b/src/components/AutoDataForm/index.vue index 05938eb41..ffa99f90b 100644 --- a/src/components/AutoDataForm/index.vue +++ b/src/components/AutoDataForm/index.vue @@ -89,6 +89,9 @@ export default { this.$log.debug('Total fields: ', this.totalFields) }, _cleanFormValue(form, remoteMeta) { + if (!form) { + form = {} + } for (const [k, v] of Object.entries(remoteMeta)) { let valueSet = form[k] if (v.type === 'nested object' && v.children) { diff --git a/src/components/TableFormatters/ChoicesDisplayFormatter.vue b/src/components/TableFormatters/ChoicesDisplayFormatter.vue index c84d375c3..b6174ca3d 100644 --- a/src/components/TableFormatters/ChoicesDisplayFormatter.vue +++ b/src/components/TableFormatters/ChoicesDisplayFormatter.vue @@ -18,10 +18,8 @@ export default { type: Object, default() { return { - iconChoices: { - }, - classChoices: { - }, + iconChoices: {}, + classChoices: {}, hasTips: false, useIcon: false, useText: true, @@ -39,7 +37,7 @@ export default { }, computed: { key() { - return this.cellValue['value'] + return this.cellValue ? this.cellValue['value'] : '' }, icon() { return this.formatterArgs.iconChoices[this.key] || '' diff --git a/src/i18n/langs/zh.json b/src/i18n/langs/zh.json index 58b1364dd..43ccafd29 100644 --- a/src/i18n/langs/zh.json +++ b/src/i18n/langs/zh.json @@ -289,6 +289,7 @@ "ReLoginErr": "登录时长已超过 5 分钟,请重新登录" }, "common": { + "Version": "版本", "Publish": "发布", "Icon": "图标", "DisplayName": "名称", @@ -918,7 +919,8 @@ "Applets": "远程应用", "AppletHosts": "应用发布机", "uploadZipTips": "请上传zip格式的文件", - "HostDeployment": "发布机部署" + "HostDeployment": "发布机部署", + "TerminalStat": "CPU/内存/磁盘" }, "sessions": { "SetToDefaultStorage": "设置为默认存储", diff --git a/src/router/settings/index.js b/src/router/settings/index.js index cf5081273..5ee0de411 100644 --- a/src/router/settings/index.js +++ b/src/router/settings/index.js @@ -92,7 +92,7 @@ export default { { path: ':id', name: 'TerminalDetail', - component: () => import('@/views/settings/Terminal/TerminalDetail'), + component: () => import('@/views/settings/Terminal/Component/TerminalDetail'), meta: { title: i18n.t('route.Terminal'), permissions: ['terminal.view_terminal'] @@ -102,7 +102,7 @@ export default { { path: ':id/update', name: 'TerminalUpdate', - component: () => import('@/views/settings/Terminal/TerminalUpdate'), + component: () => import('@/views/settings/Terminal/Component/TerminalUpdate'), meta: { title: i18n.t('route.Terminal'), permissions: ['terminal.change_terminal'] diff --git a/src/views/settings/Applet/AppletHost/AppletHostCreateUpdate.vue b/src/views/settings/Applet/AppletHost/AppletHostCreateUpdate.vue index 0a295f6a9..c470115e2 100644 --- a/src/views/settings/Applet/AppletHost/AppletHostCreateUpdate.vue +++ b/src/views/settings/Applet/AppletHost/AppletHostCreateUpdate.vue @@ -14,7 +14,7 @@ export default { config: { url: '/api/v1/terminal/applet-hosts/?oid=RemoteAppHost', addFields: [ - [this.$t('common.Automations'), ['account_automation', 'deploy_options'], 3] + [this.$t('common.Automations'), ['deploy_options'], 3] ], addFieldsMeta: { deploy_options: { diff --git a/src/views/settings/Applet/AppletHost/AppletHostDetail/Applets.vue b/src/views/settings/Applet/AppletHost/AppletHostDetail/Applets.vue index 13347109b..60a0b64ce 100644 --- a/src/views/settings/Applet/AppletHost/AppletHostDetail/Applets.vue +++ b/src/views/settings/Applet/AppletHost/AppletHostDetail/Applets.vue @@ -33,8 +33,8 @@ export default { config: { url: `/api/v1/terminal/applet-publications/?host=${this.object.id}`, columns: [ - 'applet.display_name', 'date_updated', 'status', - 'actions' + 'applet.display_name', 'applet.version', + 'date_updated', 'status', 'actions' ], columnsMeta: { 'applet.display_name': { @@ -45,15 +45,16 @@ export default { getTitle: ({ row }) => row.applet.display_name } }, + 'applet.version': { + label: this.$t('common.Version') + }, status: { label: this.$t('applets.PublishStatus'), formatter: (row) => { const typeMapper = { - 'ready': 'info', - 'pending': 'info', - 'running': 'success', - 'success': 'success', - 'failed': 'danger' + 'not_match': 'warning', + 'published': 'success', + 'unpublished': 'danger' } const tp = typeMapper[row.status.value] || 'info' return { row.status.label } diff --git a/src/views/settings/Applet/AppletHost/AppletHostList.vue b/src/views/settings/Applet/AppletHost/AppletHostList.vue index deda39504..66f4fe754 100644 --- a/src/views/settings/Applet/AppletHost/AppletHostList.vue +++ b/src/views/settings/Applet/AppletHost/AppletHostList.vue @@ -14,13 +14,13 @@ export default { tableConfig: { url: '/api/v1/terminal/applet-hosts/', columns: [ - 'name', 'address', 'protocols', + 'name', 'address', 'protocols', 'status', 'comment', 'date_created', 'date_updated', 'actions' ], columnsShow: { min: ['name', 'actions'], default: [ - 'name', 'address', 'protocols', + 'name', 'address', 'protocols', 'status', 'comment', 'actions' ] }, diff --git a/src/views/settings/Terminal/TerminalDetail.vue b/src/views/settings/Terminal/Component/TerminalDetail.vue similarity index 100% rename from src/views/settings/Terminal/TerminalDetail.vue rename to src/views/settings/Terminal/Component/TerminalDetail.vue diff --git a/src/views/settings/Terminal/TerminalList.vue b/src/views/settings/Terminal/Component/TerminalList.vue similarity index 78% rename from src/views/settings/Terminal/TerminalList.vue rename to src/views/settings/Terminal/Component/TerminalList.vue index 3f0035755..5d9189f9d 100644 --- a/src/views/settings/Terminal/TerminalList.vue +++ b/src/views/settings/Terminal/Component/TerminalList.vue @@ -5,7 +5,7 @@ :visible.sync="dialogSettings.visible" :destroy-on-close="true" :show-cancel="false" - :title="$t('sessions.terminalUpdateStorage')" + :title="$tc('sessions.terminalUpdateStorage')" :show-confirm="false" > @@ -19,13 +19,6 @@ import { GenericCreateUpdateForm } from '@/layout/components' import Dialog from '@/components/Dialog' import Select2 from '@/components/FormFields/Select2' -const numTotFixed = (row, type) => { - const cur = row.stat?.[type] || '' - if (cur instanceof Number && !Number.isInteger(cur)) { - return cur.toFixed(1) - } - return cur -} export default { components: { ListTable, @@ -67,7 +60,7 @@ export default { } }, submitMethod: () => 'post', - cleanFormValue: function(value) { + cleanFormValue: (value) => { const formValue = [] let object = {} for (const row of this.dialogSettings.selectedRows) { @@ -75,8 +68,8 @@ export default { formValue.push(object) } return formValue - }.bind(this), - onSubmit: function(validValues) { + }, + onSubmit: (validValues) => { const url = '/api/v1/terminal/terminals/' const msg = this.$t('common.updateSuccessMsg') validValues = Object.values(validValues) @@ -97,7 +90,7 @@ export default { } } }) - }.bind(this), + }, hasSaveContinue: false } }, @@ -108,15 +101,14 @@ export default { resource: 'terminal' }, columns: [ - 'name', 'remote_addr', 'session_online', - 'stat.cpu_load', 'stat.disk_used', 'stat.memory_used', - 'status', 'is_active', 'is_alive', 'actions' + 'name', 'remote_addr', 'session_online', 'stat', + 'load', 'is_active', 'actions' ], columnsShow: { min: ['name', 'actions'], default: [ - 'name', 'session_online', 'stat.cpu_load', 'stat.disk_used', - 'stat.memory_used', 'status', 'actions' + 'name', 'session_online', 'stat', + 'load', 'actions' ] }, columnsMeta: { @@ -126,25 +118,18 @@ export default { route: 'TerminalDetail' } }, - 'stat.cpu_load': { - label: this.$t('sessions.systemCpuLoad'), - width: '120px', - formatter: (row) => (numTotFixed(row, 'cpu_load')) + stat: { + label: this.$t('terminal.TerminalStat'), + formatter: (row) => { + if (!row?.stat) { + return '' + } + const stat = row.stat + return `${stat['cpu_load']} ${stat['memory_used']}% ${stat['disk_used']}%` + } }, - 'stat.disk_used': { - label: this.$t('sessions.systemDiskUsedPercent'), - width: '120px', - formatter: (row) => (numTotFixed(row, 'disk_used')) - }, - 'stat.memory_used': { - label: this.$t('sessions.systemMemoryUsedPercent'), - width: '120px', - formatter: (row) => (numTotFixed(row, 'memory_used')) - }, - status: { + load: { label: this.$t('xpack.LoadStatus'), - width: '120px', - // formatter: DisplayFormatter, filterable: 'custom', formatterArgs: { classChoices: { @@ -190,10 +175,10 @@ export default { name: 'actionUpdateSelected', title: this.$t('common.updateSelected'), can: ({ selectedRows }) => selectedRows.length > 0 && vm.$hasPerm('terminal.change_terminal'), - callback: function({ selectedRows, reloadTable }) { + callback: ({ selectedRows, reloadTable }) => { this.dialogSettings.selectedRows = selectedRows this.dialogSettings.visible = true - }.bind(this) + } } ] } diff --git a/src/views/settings/Terminal/TerminalUpdate.vue b/src/views/settings/Terminal/Component/TerminalUpdate.vue similarity index 100% rename from src/views/settings/Terminal/TerminalUpdate.vue rename to src/views/settings/Terminal/Component/TerminalUpdate.vue diff --git a/src/views/settings/Terminal/index.vue b/src/views/settings/Terminal/index.vue index 03c5340bd..442af832a 100644 --- a/src/views/settings/Terminal/index.vue +++ b/src/views/settings/Terminal/index.vue @@ -9,7 +9,7 @@