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"
>
-
+
+
+ {{ $t('common.Add') }}
+
+
+
@@ -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) {