diff --git a/src/components/AccountCreateUpdateForm/index.vue b/src/components/AccountCreateUpdateForm/index.vue index d7f27c748..f47f6953e 100644 --- a/src/components/AccountCreateUpdateForm/index.vue +++ b/src/components/AccountCreateUpdateForm/index.vue @@ -32,7 +32,7 @@ export default { form: this.account || { }, fields: [ [this.$t('common.Basic'), ['name', 'username', 'privileged']], - [this.$t('assets.Secret'), ['secret_type', 'password', 'ssh_key', 'token', 'api_key', 'passphrase']], + [this.$t('assets.Secret'), ['secret_type', 'secret', 'ssh_key', 'token', 'api_key', 'passphrase']], [this.$t('common.Other'), ['push_now', 'comment']] ], defaultPrivilegedAccounts: ['root', 'administrator'], diff --git a/src/components/AssetSelect/index.vue b/src/components/AssetSelect/index.vue index a95af21e2..ab364b792 100644 --- a/src/components/AssetSelect/index.vue +++ b/src/components/AssetSelect/index.vue @@ -110,7 +110,7 @@ export default { { prop: 'protocols', formatter: function(row) { - return {row.protocols.toString()} + return {row.protocols?.toString()} }, label: this.$t('assets.Protocols') } diff --git a/src/components/TableFormatters/ShowKeyCopyFormatter.vue b/src/components/TableFormatters/ShowKeyCopyFormatter.vue index 9d533ea9f..22e3ee307 100644 --- a/src/components/TableFormatters/ShowKeyCopyFormatter.vue +++ b/src/components/TableFormatters/ShowKeyCopyFormatter.vue @@ -32,7 +32,7 @@ export default { }, cellValue: { type: [String, Number], - default: null + default: '' }, hasShow: { type: Boolean, @@ -56,7 +56,7 @@ export default { methods: { switchShowValue() { const value = this.value || this.cellValue - return '******' + value.replace(/[\s\S]/g, '') + return value ? '******' + value.replace(/[\s\S]/g, '') : '' }, onShow() { const { currentValue, switchShowValue } = this diff --git a/src/views/accounts/AccountTemplate/AccountTemplateCreateUpdate.vue b/src/views/accounts/AccountTemplate/AccountTemplateCreateUpdate.vue index 483a6d260..6dc04dbf7 100644 --- a/src/views/accounts/AccountTemplate/AccountTemplateCreateUpdate.vue +++ b/src/views/accounts/AccountTemplate/AccountTemplateCreateUpdate.vue @@ -21,10 +21,30 @@ export default { [this.$t('common.Other'), ['comment']] ], fieldsMeta: { + secret_type: { + on: { + change: this.secretTypeChange + } + }, + secret: { + el: { + type: 'input', + rows: 4 + } + } }, createSuccessNextRoute: { name: 'AccountTemplateList' }, updateSuccessNextRoute: { name: 'AccountTemplateList' } } + }, + methods: { + secretTypeChange([value]) { + if (value !== 'password') { + this.$set(this.fieldsMeta.secret.el, 'type', 'textarea') + } else { + this.$set(this.fieldsMeta.secret.el, 'type', 'input') + } + } } } diff --git a/src/views/accounts/AccountTemplate/AccountTemplateDetail/Detail.vue b/src/views/accounts/AccountTemplate/AccountTemplateDetail/Detail.vue index 7ecb95e0c..23f55bea9 100644 --- a/src/views/accounts/AccountTemplate/AccountTemplateDetail/Detail.vue +++ b/src/views/accounts/AccountTemplate/AccountTemplateDetail/Detail.vue @@ -31,7 +31,7 @@ export default { quickActions: [ { title: this.$t('assets.PrivilegedTemplate'), - type: 'switcher', + type: 'switch', attrs: { model: this.object?.privileged, disabled: !this.$hasPerm('assets.change_accounttemplate') @@ -39,7 +39,7 @@ export default { callbacks: { change: function(val) { this.$axios.patch( - '/api/v1/assets/account-templates/', + `/api/v1/assets/account-templates/${this.object.id}/`, { privileged: val } ).then(res => { this.$message.success(this.$t('common.updateSuccessMsg')) diff --git a/src/views/assets/Asset/AssetCreateUpdate/components/AccountTemplateDialog.vue b/src/views/assets/Asset/AssetCreateUpdate/components/AccountTemplateDialog.vue index a99731817..793fe2f0c 100644 --- a/src/views/assets/Asset/AssetCreateUpdate/components/AccountTemplateDialog.vue +++ b/src/views/assets/Asset/AssetCreateUpdate/components/AccountTemplateDialog.vue @@ -7,8 +7,21 @@ width="70%" v-bind="$attrs" v-on="$listeners" + @confirm="handleConfirm" + @cancel="handleCancel" > - + @@ -25,17 +38,36 @@ export default { visible: { type: Boolean, default: false + }, + accounts: { + type: Array, + default: () => ([]) } }, data() { return { + accountsSelected: [], tableConfig: { url: '/api/v1/assets/account-templates/', - columns: ['name', 'username', 'privileged', 'actions'], + columns: ['name', 'username', 'privileged'], columnsMeta: { privileged: { width: '100px' } + }, + listeners: { + 'toggle-row-selection': (isSelected, row) => { + if (isSelected) { + this.addRowToSelect(row) + } else { + this.removeRowToSelect(row) + } + } + }, + theRowDefaultIsSelected: (row) => { + return this.accounts.some((account) => { + return account.id === row.id + }) } } } @@ -49,6 +81,36 @@ export default { this.$emit('update:visible', val) } } + }, + methods: { + handleConfirm() { + this.iVisible = false + // 过滤掉添加里还没有id的账号 + const hasIdAccounts = this.accounts.filter(i => i?.id) + const data = _.xorBy(hasIdAccounts, this.accountsSelected, 'id') + this.accounts.push(...data) + }, + handleCancel() { + this.iVisible = false + }, + onAddClick() { + this.$router.push({ name: 'AccountTemplateList' }) + }, + hasSelectValue(row) { + return this.accountsSelected.some(item => item.id === row.id) + }, + addRowToSelect(row) { + const hasSelectValue = this.hasSelectValue(row) + if (!hasSelectValue) { + this.accountsSelected.push(row) + } + }, + removeRowToSelect(row) { + const hasSelectValue = this.hasSelectValue(row) + if (hasSelectValue) { + this.accountsSelected.splice(hasSelectValue, 1) + } + } } } diff --git a/src/views/assets/Asset/AssetCreateUpdate/components/AssetAccounts.vue b/src/views/assets/Asset/AssetCreateUpdate/components/AssetAccounts.vue index b66788bdd..843d744b5 100644 --- a/src/views/assets/Asset/AssetCreateUpdate/components/AssetAccounts.vue +++ b/src/views/assets/Asset/AssetCreateUpdate/components/AssetAccounts.vue @@ -31,7 +31,9 @@ :accounts="accounts" /> @@ -88,7 +90,7 @@ export default { methods: { removeAccount(account) { this.accounts = this.accounts.filter((item) => { - return item._id !== account._id + return item.id !== account.id }) }, onEditClick(account) {