From 8950d57ff802462556fc0f5d371162eb947fe22a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Chuailei000=E2=80=9D?= <2280131253@qq.com> Date: Mon, 24 Oct 2022 14:57:45 +0800 Subject: [PATCH 1/5] =?UTF-8?q?feat:=20=E8=B5=84=E4=BA=A7=E8=B4=A6?= =?UTF-8?q?=E5=8F=B7=E5=A2=9E=E5=8A=A0=E6=9F=A5=E7=9C=8B=E5=8E=86=E5=8F=B2?= =?UTF-8?q?=E5=AF=86=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PasswordHistoryDialog.vue | 75 +++++++++++++++++++ .../AccountListTable/ShowSecretInfo.vue | 46 ++++++++++-- src/components/AccountListTable/index.vue | 21 +++++- .../TableFormatters/ShowKeyCopyFormatter.vue | 39 +++++++--- src/i18n/langs/en.json | 2 + src/i18n/langs/ja.json | 2 + src/i18n/langs/zh.json | 2 + 7 files changed, 168 insertions(+), 19 deletions(-) create mode 100644 src/components/AccountListTable/PasswordHistoryDialog.vue diff --git a/src/components/AccountListTable/PasswordHistoryDialog.vue b/src/components/AccountListTable/PasswordHistoryDialog.vue new file mode 100644 index 000000000..eb66af16e --- /dev/null +++ b/src/components/AccountListTable/PasswordHistoryDialog.vue @@ -0,0 +1,75 @@ + + + + + diff --git a/src/components/AccountListTable/ShowSecretInfo.vue b/src/components/AccountListTable/ShowSecretInfo.vue index 6cbab634d..08da85ec6 100644 --- a/src/components/AccountListTable/ShowSecretInfo.vue +++ b/src/components/AccountListTable/ShowSecretInfo.vue @@ -18,16 +18,25 @@
- + - - + + - - + + + + + {{ $moment(authInfo.date_created, 'YYYY-MM-DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss') }} + + + {{ $moment(authInfo.date_updated, 'YYYY-MM-DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss') }} + + + {{ authInfo.version }}
@@ -38,11 +47,14 @@ - diff --git a/src/components/AccountListTable/index.vue b/src/components/AccountListTable/index.vue index 6921712ab..5bb221193 100644 --- a/src/components/AccountListTable/index.vue +++ b/src/components/AccountListTable/index.vue @@ -15,6 +15,11 @@ :account="account" @add="addAccountSuccess" /> + @@ -27,6 +32,7 @@ import AddAccount from './AddAccount' import { connectivityMeta } from './const' import { openTaskPage } from '@/utils/jms' import { hasUUID } from '@/utils/common' +import PasswordHistoryDialog from './PasswordHistoryDialog' export default { name: 'AccountListTable', @@ -34,7 +40,8 @@ export default { ListTable, UpdateSecretInfo, ShowSecretInfo, - AddAccount + AddAccount, + PasswordHistoryDialog }, props: { url: { @@ -71,6 +78,7 @@ export default { data() { const vm = this return { + showPasswordHistoryDialog: false, showViewSecretDialog: false, showUpdateSecretDialog: false, showAddDialog: false, @@ -176,6 +184,17 @@ export default { vm.showAddDialog = true }) } + }, + { + title: this.$t('accounts.HistoryPassword'), + can: this.$hasPerm('assets.change_assetaccountsecret') && !this.$store.getters.currentOrgIsRoot, + callback: ({ row }) => { + vm.account = row + vm.showPasswordHistoryDialog = false + setTimeout(() => { + vm.showPasswordHistoryDialog = true + }) + } } ] } diff --git a/src/components/TableFormatters/ShowKeyCopyFormatter.vue b/src/components/TableFormatters/ShowKeyCopyFormatter.vue index 6ce047a24..9d533ea9f 100644 --- a/src/components/TableFormatters/ShowKeyCopyFormatter.vue +++ b/src/components/TableFormatters/ShowKeyCopyFormatter.vue @@ -3,6 +3,7 @@ {{ currentValue }} diff --git a/src/components/ListTable/TableAction/ImportDialog.vue b/src/components/ListTable/TableAction/ImportDialog.vue index d1e8d2fb3..b2d9110a4 100644 --- a/src/components/ListTable/TableAction/ImportDialog.vue +++ b/src/components/ListTable/TableAction/ImportDialog.vue @@ -5,14 +5,14 @@ :destroy-on-close="true" :close-on-click-modal="false" :loading-status="loadStatus" - width="80%" + width="60%" class="importDialog" :show-cancel="false" :show-confirm="false" @close="handleImportCancel" > - - + + {{ this.$t('common.Create') }} @@ -27,7 +27,7 @@ - +
{{ $t('common.imExport.dragUploadFileInfo') }}
- {{ $t('common.imExport.uploadCsvLth10MHelpText') }} + + {{ $t('common.imExport.uploadCsvLth10MHelpText') }} +
{{ renderError }}
@@ -243,10 +245,6 @@ export default { overflow: auto } - .importDialog >>> .el-form-item.file-uploader { - padding-right: 150px; - } - .file-uploader >>> .el-upload { width: 100%; //padding-right: 150px; diff --git a/src/i18n/langs/zh.json b/src/i18n/langs/zh.json index 7f799c172..13e23a0b7 100644 --- a/src/i18n/langs/zh.json +++ b/src/i18n/langs/zh.json @@ -408,6 +408,7 @@ "Update": "更新", "Revise": "修改", "Upload": "上传", + "OfflineUpload": "离线上传", "Clone": "克隆", "Username": "用户名", "Validity": "有效", @@ -705,6 +706,7 @@ }, "route": { "": "", + "AppletCreate": "创建远程应用", "CreateEndpoint": "创建端点", "UpdateEndpoint": "更新端点", "CreateEndpointRule": "创建端点规则", @@ -885,6 +887,11 @@ "rbac": { "Permissions": "权限" }, + "terminal": { + "Applets": "远程应用", + "AppletHosts": "应用发布机", + "uploadZipTips": "请上传zip格式的文件" + }, "sessions": { "SetToDefaultStorage": "设置为默认存储", "SetToDefault": "设为默认", @@ -966,6 +973,7 @@ } }, "setting": { + "Applets": "远程应用", "EndpointListHelpMessage": "服务端点是用户访问服务的地址(端口),当用户在连接资产时,会根据端点规则和资产标签选择服务端点,作为访问入口建立连接,实现分布式连接资产", "EndpointRuleListHelpMessage": "对于服务端点选择策略,目前支持两种:
1、根据端点规则指定端点(当前页面);
2、通过资产标签选择端点,标签名固定是 endpoint,值是端点的名称。
两种方式优先使用标签匹配,因为 IP 段可能冲突,标签方式是作为规则的补充存在的。", "EnableKoKoSSHHelpText": "开启时连接资产会显示 SSH Client 拉起方式", diff --git a/src/router/settings/index.js b/src/router/settings/index.js index ac9de5c95..527e1dd97 100644 --- a/src/router/settings/index.js +++ b/src/router/settings/index.js @@ -199,6 +199,38 @@ export default { } ] }, + { + path: '/settings/applets', + component: empty, + redirect: '', + meta: { + title: i18n.t('setting.Applets'), + app: 'terminal', + permissions: ['settings.change_terminal'] + }, + children: [ + { + path: '', + name: 'Applets', + component: () => import('@/views/settings/Applet'), + meta: { + title: i18n.t('setting.Applets'), + icon: 'tasks', + permissions: ['settings.change_terminal'] + } + }, + { + path: 'create', + name: 'AppletCreate', + component: () => import('@/views/settings/Applet/Applets/AppletCreateUpdate'), + meta: { + title: i18n.t('route.AppletCreate'), + permissions: ['settings.change_terminal'] + }, + hidden: true + } + ] + }, { path: '/settings/security', name: 'Security', diff --git a/src/router/workbench/index.js b/src/router/workbench/index.js index 8c21a50b2..e4d64545d 100644 --- a/src/router/workbench/index.js +++ b/src/router/workbench/index.js @@ -42,48 +42,6 @@ export default { permissions: ['perms.view_myassets'] } }, - { - path: '/workbench/apps', - name: 'Apps', - component: empty, - redirect: 'remoteapp', - alwaysShow: true, - meta: { - title: i18n.t('route.MyApps'), - icon: 'th', - permissions: ['perms.view_myapps'] - }, - children: [ - { - path: 'remote-apps', - name: 'MyRemoteApps', - component: () => import('@/views/myapps/RemoteApp'), - meta: { - title: i18n.t('route.RemoteApp'), - permissions: [], - licenseRequired: true - } - }, - { - path: 'databases', - name: 'MyDatabases', - component: () => import('@/views/myapps/DatabaseApp'), - meta: { - title: i18n.t('route.DatabaseApp'), - permissions: [] - } - }, - { - path: 'kubernetes', - name: 'MyKubernetes', - component: () => import('@/views/myapps/KubernetesApp'), - meta: { - title: i18n.t('route.KubernetesApp'), - permissions: [] - } - } - ] - }, { path: '/workbench/ops', component: empty, diff --git a/src/views/assets/Asset/AssetCreateUpdate/components/AssetAccounts.vue b/src/views/assets/Asset/AssetCreateUpdate/components/AssetAccounts.vue index 5ee5b786c..c1985b6d7 100644 --- a/src/views/assets/Asset/AssetCreateUpdate/components/AssetAccounts.vue +++ b/src/views/assets/Asset/AssetCreateUpdate/components/AssetAccounts.vue @@ -1,36 +1,37 @@ @@ -61,11 +62,11 @@ export default { }, data() { return { - addAccountDialogVisible: false, - templateDialogVisible: false, accounts: [], account: {}, - initial: false + initial: false, + addAccountDialogVisible: false, + templateDialogVisible: false } }, watch: { @@ -91,7 +92,7 @@ export default { onEditClick(account) { this.account = account setTimeout(() => { - this.visible = true + this.addAccountDialogVisible = true }) }, onAddClick() { diff --git a/src/views/assets/Platform/const.js b/src/views/assets/Platform/const.js index 9149897a2..3110405a9 100644 --- a/src/views/assets/Platform/const.js +++ b/src/views/assets/Platform/const.js @@ -14,7 +14,7 @@ export const platformFieldsMeta = (vm) => { 'ansible_enabled', 'ansible_config', 'ping_enabled', 'ping_method', 'gather_facts_enabled', 'gather_facts_method', - 'create_account_enabled', 'create_account_method', + 'push_account_enabled', 'push_account_method', 'change_secret_enabled', 'change_secret_method', 'verify_account_enabled', 'verify_account_method' ], @@ -25,7 +25,7 @@ export const platformFieldsMeta = (vm) => { }, ping_method: {}, gather_facts_method: {}, - create_account_method: {}, + push_account_method: {}, change_secret_method: {}, verify_account_method: {} } diff --git a/src/views/myapps/DatabaseApp.vue b/src/views/myapps/DatabaseApp.vue deleted file mode 100644 index 9998dbb52..000000000 --- a/src/views/myapps/DatabaseApp.vue +++ /dev/null @@ -1,96 +0,0 @@ - - - - - diff --git a/src/views/myapps/KubernetesApp.vue b/src/views/myapps/KubernetesApp.vue deleted file mode 100644 index d59db2a62..000000000 --- a/src/views/myapps/KubernetesApp.vue +++ /dev/null @@ -1,96 +0,0 @@ - - - - - diff --git a/src/views/myapps/RemoteApp.vue b/src/views/myapps/RemoteApp.vue deleted file mode 100644 index 381ccf65b..000000000 --- a/src/views/myapps/RemoteApp.vue +++ /dev/null @@ -1,95 +0,0 @@ - - - - - diff --git a/src/views/settings/Applet/AppletHosts.vue b/src/views/settings/Applet/AppletHosts.vue new file mode 100644 index 000000000..62cb080dc --- /dev/null +++ b/src/views/settings/Applet/AppletHosts.vue @@ -0,0 +1,14 @@ + + + + + diff --git a/src/views/settings/Applet/Applets/AppletCreateUpdate.vue b/src/views/settings/Applet/Applets/AppletCreateUpdate.vue new file mode 100644 index 000000000..654101260 --- /dev/null +++ b/src/views/settings/Applet/Applets/AppletCreateUpdate.vue @@ -0,0 +1,34 @@ + + + + + diff --git a/src/views/settings/Applet/Applets/AppletList.vue b/src/views/settings/Applet/Applets/AppletList.vue new file mode 100644 index 000000000..5764a0751 --- /dev/null +++ b/src/views/settings/Applet/Applets/AppletList.vue @@ -0,0 +1,60 @@ + + + + + diff --git a/src/views/settings/Applet/Applets/UploadDialog.vue b/src/views/settings/Applet/Applets/UploadDialog.vue new file mode 100644 index 000000000..95e77dfb7 --- /dev/null +++ b/src/views/settings/Applet/Applets/UploadDialog.vue @@ -0,0 +1,72 @@ + + + + + diff --git a/src/views/settings/Applet/index.vue b/src/views/settings/Applet/index.vue new file mode 100644 index 000000000..4a8f15f73 --- /dev/null +++ b/src/views/settings/Applet/index.vue @@ -0,0 +1,40 @@ + + + + + From da4cc3de20c2e0e4b2b00863b9fd54fa9a3f9798 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Chuailei000=E2=80=9D?= <2280131253@qq.com> Date: Thu, 27 Oct 2022 15:03:00 +0800 Subject: [PATCH 4/5] =?UTF-8?q?perf:=20=E4=BC=98=E5=8C=96ZTree=E7=BB=84?= =?UTF-8?q?=E4=BB=B6=E9=80=89=E6=8B=A9=E5=AE=8C=E5=B7=A6=E4=BE=A7=E8=B5=84?= =?UTF-8?q?=E4=BA=A7=E5=90=8E=E8=BF=9B=E5=85=A5=E8=B5=84=E4=BA=A7=E8=AF=A6?= =?UTF-8?q?=E6=83=85=E5=9C=A8=E8=BF=94=E5=9B=9E=E5=88=97=E8=A1=A8=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=E8=BF=98=E4=BF=9D=E6=8C=81=E4=B9=8B=E5=89=8D=E9=80=89?= =?UTF-8?q?=E6=8B=A9=E7=9A=84=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/AccountListTable/index.vue | 12 ++++++------ src/components/TreeTable/index.vue | 10 ++++++++++ src/views/accounts/AssetAccount/AssetAccountList.vue | 8 ++++---- 3 files changed, 20 insertions(+), 10 deletions(-) diff --git a/src/components/AccountListTable/index.vue b/src/components/AccountListTable/index.vue index aab19a2bf..73f5b53f8 100644 --- a/src/components/AccountListTable/index.vue +++ b/src/components/AccountListTable/index.vue @@ -236,7 +236,7 @@ export default { this.$set(this.tableConfig, 'url', iNew) this.$set(this.headerActions.exportOptions, 'url', iNew.replace('/accounts/', '/account-secrets/')) }, - '$route.query.assets': { + '$route.query.asset': { immediate: true, handler() { this.hasAccountPermission() @@ -262,14 +262,14 @@ export default { this.$refs.ListTable.reloadTable() }, async getAssetDetail() { - const { query: { assets }} = this.$route - this.iAsset = await this.$axios.get(`/api/v1/assets/assets/${assets}/`) + const { query: { asset }} = this.$route + this.iAsset = await this.$axios.get(`/api/v1/assets/assets/${asset}/`) }, hasAccountPermission() { - const { path, query: { assets }} = this.$route + const { path, query: { asset }} = this.$route if (!hasUUID(path)) { - if (assets) this.getAssetDetail() - const hasPerm = this.$hasPerm('assets.add_account') && !!assets + if (asset) this.getAssetDetail() + const hasPerm = this.$hasPerm('assets.add_account') && !!asset this.$set(this.headerActions.extraActions[0], 'can', hasPerm) } } diff --git a/src/components/TreeTable/index.vue b/src/components/TreeTable/index.vue index 25194cdaa..54efaac96 100644 --- a/src/components/TreeTable/index.vue +++ b/src/components/TreeTable/index.vue @@ -44,6 +44,8 @@ import AutoDataZTree from '../AutoDataZTree' import Dialog from '@/components/Dialog' import ListTable from '../ListTable' import IBox from '../IBox' +import { setUrlParam } from '@/utils/common' + export default { name: 'TreeTable', components: { @@ -88,8 +90,16 @@ export default { }, mounted() { // debug(this.treeSetting) + this.initSetTableUrl() }, methods: { + initSetTableUrl() { + const { asset = '', node = '' } = this.$route.query || {} + let url = this.iTableConfig.url + url = setUrlParam(url, 'asset', asset) + url = setUrlParam(url, 'node', node) + this.$set(this.iTableConfig, 'url', url) + }, handleUrlChange(url) { this.$set(this.iTableConfig, 'url', url) this.$emit('urlChange', url) diff --git a/src/views/accounts/AssetAccount/AssetAccountList.vue b/src/views/accounts/AssetAccount/AssetAccountList.vue index fac6f2eec..a456b156f 100644 --- a/src/views/accounts/AssetAccount/AssetAccountList.vue +++ b/src/views/accounts/AssetAccount/AssetAccountList.vue @@ -42,12 +42,12 @@ export default { let url = '/api/v1/assets/accounts/' if (treeNode.meta.type === 'node') { const nodeId = treeNode.meta.data.id - url = setUrlParam(url, 'assets', '') - url = setUrlParam(url, 'nodes', nodeId) + url = setUrlParam(url, 'asset', '') + url = setUrlParam(url, 'node', nodeId) } else if (treeNode.meta.type === 'asset') { const assetId = treeNode.meta.data.id - url = setUrlParam(url, 'nodes', '') - url = setUrlParam(url, 'assets', assetId) + url = setUrlParam(url, 'node', '') + url = setUrlParam(url, 'asset', assetId) } this.$set(this.tableConfig, 'url', url) From ba5a19582eb4e76e17e93f04f1692e9e6c9f97e1 Mon Sep 17 00:00:00 2001 From: ibuler Date: Thu, 27 Oct 2022 19:05:43 +0800 Subject: [PATCH 5/5] =?UTF-8?q?pref:=20=E4=BF=AE=E6=94=B9=20Applet=20Host?= =?UTF-8?q?=20=E5=88=9B=E5=BB=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ListTable/TableAction/ImportDialog.vue | 24 +++++--- src/i18n/langs/zh.json | 3 + src/router/settings/index.js | 22 ++++++-- .../BaseAssetCreateUpdate.vue | 12 +++- .../Asset/AssetList/components/BaseList.vue | 3 +- src/views/settings/Applet/AppletHosts.vue | 14 ----- .../AppletHosts/AppletHostCreateUpdate.vue | 48 ++++++++++++++++ .../Applet/AppletHosts/AppletHostList.vue | 55 +++++++++++++++++++ .../Applet/Applets/AppletCreateUpdate.vue | 34 ------------ .../settings/Applet/Applets/AppletList.vue | 30 +++++++++- .../settings/Applet/Applets/UploadDialog.vue | 32 ++++++++++- src/views/settings/Applet/index.vue | 2 +- src/views/users/User/UserList.vue | 2 +- 13 files changed, 209 insertions(+), 72 deletions(-) delete mode 100644 src/views/settings/Applet/AppletHosts.vue create mode 100644 src/views/settings/Applet/AppletHosts/AppletHostCreateUpdate.vue create mode 100644 src/views/settings/Applet/AppletHosts/AppletHostList.vue delete mode 100644 src/views/settings/Applet/Applets/AppletCreateUpdate.vue diff --git a/src/components/ListTable/TableAction/ImportDialog.vue b/src/components/ListTable/TableAction/ImportDialog.vue index b2d9110a4..58932b3b7 100644 --- a/src/components/ListTable/TableAction/ImportDialog.vue +++ b/src/components/ListTable/TableAction/ImportDialog.vue @@ -22,8 +22,8 @@
{{ downloadTemplateTitle }} - CSV - XLSX + CSV + XLSX
@@ -40,7 +40,9 @@ accept=".csv,.xlsx" > -
{{ $t('common.imExport.dragUploadFileInfo') }}
+
+ {{ $t('common.imExport.dragUploadFileInfo') }} +
{{ $t('common.imExport.uploadCsvLth10MHelpText') }} @@ -170,7 +172,10 @@ export default { this.$axios.post( renderToJsonUrl, file.raw, - { headers: { 'Content-Type': isCsv ? 'text/csv' : 'text/xlsx' }, disableFlashErrorMsg: true } + { + headers: { 'Content-Type': isCsv ? 'text/csv' : 'text/xlsx' }, + disableFlashErrorMsg: true + } ).then(data => { this.jsonData = data this.showTable = true @@ -207,9 +212,8 @@ export default { } return this.url.indexOf('?') === -1 ? `${this.url}?${query}` : `${this.url}&${query}` }, - // eslint-disable-next-line handle-callback-err - catchError(error) { - // debug(error) + catchError(err) { + console.log(err) }, onSuccess(msg) { this.errorMsg = '' @@ -222,7 +226,7 @@ export default { window.URL.revokeObjectURL(url) }, async handleImportConfirm() { - this.$refs['importTable'].performUpload() + await this.$refs['importTable'].performUpload() }, handleImportCancel() { this.showImportDialog = false @@ -285,5 +289,9 @@ export default { .el-upload__tip { line-height: 1.5; padding-top: 0; + + .el-link { + margin-left: 10px; + } } diff --git a/src/i18n/langs/zh.json b/src/i18n/langs/zh.json index 13e23a0b7..e1b5e9250 100644 --- a/src/i18n/langs/zh.json +++ b/src/i18n/langs/zh.json @@ -98,6 +98,7 @@ "NoSQLProtocol": "非关系数据库" }, "assets": { + "Address": "地址", "PrivateKey": "密钥", "Secret": "密码", "Network": "网络", @@ -706,6 +707,8 @@ }, "route": { "": "", + "AppletHostCreate": "添加远程应用发布机", + "AppletHostUpdate": "更新远程应用发布机", "AppletCreate": "创建远程应用", "CreateEndpoint": "创建端点", "UpdateEndpoint": "更新端点", diff --git a/src/router/settings/index.js b/src/router/settings/index.js index 527e1dd97..44e737794 100644 --- a/src/router/settings/index.js +++ b/src/router/settings/index.js @@ -220,14 +220,24 @@ export default { } }, { - path: 'create', - name: 'AppletCreate', - component: () => import('@/views/settings/Applet/Applets/AppletCreateUpdate'), + path: 'hosts/create', + name: 'AppletHostCreate', + component: () => import('@/views/settings/Applet/AppletHosts/AppletHostCreateUpdate'), + hidden: true, meta: { - title: i18n.t('route.AppletCreate'), + title: i18n.t('route.AppletHostCreate'), permissions: ['settings.change_terminal'] - }, - hidden: true + } + }, + { + path: 'hosts/:id/update', + name: 'AppletHostUpdate', + component: () => import('@/views/settings/Applet/AppletHosts/AppletHostCreateUpdate'), + hidden: true, + meta: { + title: i18n.t('route.AppletHostUpdate'), + permissions: ['settings.change_terminal'] + } } ] }, diff --git a/src/views/assets/Asset/AssetCreateUpdate/BaseAssetCreateUpdate.vue b/src/views/assets/Asset/AssetCreateUpdate/BaseAssetCreateUpdate.vue index b2a508ba9..604b8f4fb 100644 --- a/src/views/assets/Asset/AssetCreateUpdate/BaseAssetCreateUpdate.vue +++ b/src/views/assets/Asset/AssetCreateUpdate/BaseAssetCreateUpdate.vue @@ -21,6 +21,14 @@ export default { addFieldsMeta: { type: Object, default: () => ({}) + }, + createSuccessNextRoute: { + type: Object, + default: () => ({ name: 'AssetList' }) + }, + updateSuccessNextRoute: { + type: Object, + default: () => ({ name: 'AssetList' }) } }, data() { @@ -31,8 +39,8 @@ export default { initial: {}, platform: {}, url: '/api/v1/assets/hosts/', - createSuccessNextRoute: { name: 'AssetList' }, - updateSuccessNextRoute: { name: 'AssetList' }, + createSuccessNextRoute: this.createSuccessNextRoute, + updateSuccessNextRoute: this.updateSuccessNextRoute, hasDetailInMsg: false, fields: [ [this.$t('common.Basic'), ['name', 'address', 'platform']], diff --git a/src/views/assets/Asset/AssetList/components/BaseList.vue b/src/views/assets/Asset/AssetList/components/BaseList.vue index 633045818..6347fbdee 100644 --- a/src/views/assets/Asset/AssetList/components/BaseList.vue +++ b/src/views/assets/Asset/AssetList/components/BaseList.vue @@ -110,8 +110,7 @@ export default { }, protocols: { formatter: (row) => { - let data = row.protocols.map(item => item.name + '/' + item.port) - data = data.join(', ') + const data = row.protocols.map(p => {p.name}/{p.port} ) return {data} } }, diff --git a/src/views/settings/Applet/AppletHosts.vue b/src/views/settings/Applet/AppletHosts.vue deleted file mode 100644 index 62cb080dc..000000000 --- a/src/views/settings/Applet/AppletHosts.vue +++ /dev/null @@ -1,14 +0,0 @@ - - - - - diff --git a/src/views/settings/Applet/AppletHosts/AppletHostCreateUpdate.vue b/src/views/settings/Applet/AppletHosts/AppletHostCreateUpdate.vue new file mode 100644 index 000000000..b207c1335 --- /dev/null +++ b/src/views/settings/Applet/AppletHosts/AppletHostCreateUpdate.vue @@ -0,0 +1,48 @@ + + + + + diff --git a/src/views/settings/Applet/AppletHosts/AppletHostList.vue b/src/views/settings/Applet/AppletHosts/AppletHostList.vue new file mode 100644 index 000000000..3c53aaf64 --- /dev/null +++ b/src/views/settings/Applet/AppletHosts/AppletHostList.vue @@ -0,0 +1,55 @@ + + + + + diff --git a/src/views/settings/Applet/Applets/AppletCreateUpdate.vue b/src/views/settings/Applet/Applets/AppletCreateUpdate.vue deleted file mode 100644 index 654101260..000000000 --- a/src/views/settings/Applet/Applets/AppletCreateUpdate.vue +++ /dev/null @@ -1,34 +0,0 @@ - - - - - diff --git a/src/views/settings/Applet/Applets/AppletList.vue b/src/views/settings/Applet/Applets/AppletList.vue index 5764a0751..9809d4bfd 100644 --- a/src/views/settings/Applet/Applets/AppletList.vue +++ b/src/views/settings/Applet/Applets/AppletList.vue @@ -20,12 +20,38 @@ export default { tableConfig: { url: '/api/v1/terminal/applets/', columns: [ - 'name', 'display_name', 'icon', 'type', 'actions' + 'icon', 'name', 'version', 'author', 'protocols', + 'type', 'comment', 'date_created', 'date_updated', 'actions' ], + columnsShow: { + min: ['icon', 'name', 'version', 'author', 'protocols', 'actions'], + default: [ + 'icon', 'name', 'version', 'author', 'protocols', + 'type', 'comment', 'actions' + ] + }, columnsMeta: { icon: { + align: 'center', + width: '60px', formatter: (row) => { - return icon + return icon + } + }, + name: { + formatterArgs: { + getTitle: ({ row }) => row['display_name'] + } + }, + version: { + width: '80px' + }, + type: { + width: '80px' + }, + protocols: { + formatter: (row) => { + return row.protocols.map(tag => {tag}) } } } diff --git a/src/views/settings/Applet/Applets/UploadDialog.vue b/src/views/settings/Applet/Applets/UploadDialog.vue index 95e77dfb7..be96eaa4f 100644 --- a/src/views/settings/Applet/Applets/UploadDialog.vue +++ b/src/views/settings/Applet/Applets/UploadDialog.vue @@ -2,6 +2,7 @@ @@ -22,7 +23,9 @@ accept=".zip" > -
{{ $t('common.imExport.dragUploadFileInfo') }}
+
+ {{ $t('common.imExport.dragUploadFileInfo') }} +
{{ $t('terminal.uploadZipTips') }} @@ -45,13 +48,38 @@ export default { data() { return { hasFileFormatOrSizeError: false, - renderError: '' + renderError: '', + file: null } }, methods: { onFileChange(file, fileList) { + if (file.status !== 'ready') { + return + } + this.file = file }, beforeUpload(file) { + }, + onSubmit() { + if (!this.file) { + return + } + const form = new FormData() + form.append('file', this.file.raw) + this.$axios.post( + '/api/v1/terminal/applets/upload/', + form, + { + headers: { 'Content-Type': 'multipart/form-data' }, + disableFlashErrorMsg: true + } + ).then(res => { + this.$message.success('上传成功') + this.$emit('update:visible', false) + }).catch(err => { + this.$message.error(err) + }) } } } diff --git a/src/views/settings/Applet/index.vue b/src/views/settings/Applet/index.vue index 4a8f15f73..246d44572 100644 --- a/src/views/settings/Applet/index.vue +++ b/src/views/settings/Applet/index.vue @@ -9,7 +9,7 @@