diff --git a/src/components/FormFields/ProtocolSelector/ProtocolSettingDialog.vue b/src/components/FormFields/ProtocolSelector/ProtocolSettingDialog.vue index 48e2189d5..286274d61 100644 --- a/src/components/FormFields/ProtocolSelector/ProtocolSettingDialog.vue +++ b/src/components/FormFields/ProtocolSelector/ProtocolSettingDialog.vue @@ -47,8 +47,9 @@ export default { } }, data() { + const vm = this return { - bases: ['required', 'default'], + baseAttrs: ['required', 'default'], defaultSetting: { sftp_enabled: true, sftp_home: '/tmp', @@ -67,17 +68,39 @@ export default { url: '', fields: [ [this.$t('common.Basic'), [ + { + id: 'primary', + label: this.$t('assets.Primary'), + type: 'switch', + helpText: this.$t('assets.PrimaryProtocol'), + on: { + change: ([val], updateForm) => { + const relatedFields = vm.config['fields'][0][1] + .filter(item => this.baseAttrs.includes(item.id)) + .filter(item => item.id !== 'primary') + if (val) { + const relatedValue = relatedFields.reduce((acc, cur) => { + acc[cur.id] = true + return acc + }, {}) + updateForm(relatedValue) + } + } + } + }, { id: 'required', label: this.$t('assets.Required'), type: 'switch', - helpText: this.$t('assets.RequiredProtocols') + helpText: this.$t('assets.RequiredProtocol'), + disabled: false }, { id: 'default', label: this.$t('assets.Default'), type: 'switch', - helpText: this.$t('assets.DefaultProtocol') + helpText: this.$t('assets.DefaultProtocol'), + disabled: false } ]], [this.$t('assets.LoginConfig'), [ @@ -142,23 +165,20 @@ export default { } }, created() { - const itemSetting = this.item.setting || this.defaultSetting - for (const i of this.bases) { - if (this.item.hasOwnProperty(i)) { - itemSetting[i] = this.item[i] - } + for (const i of this.baseAttrs) { + this.form[i] = !!this.item[i] } - this.form = itemSetting }, methods: { onSubmit(form) { - for (const i of this.bases) { + for (const i of this.baseAttrs) { if (form.hasOwnProperty(i)) { this.item[i] = form[i] } } this.item.setting = form this.$emit('update:visible', false) + this.$emit('confirm', this.item) } } } diff --git a/src/components/FormFields/ProtocolSelector/index.vue b/src/components/FormFields/ProtocolSelector/index.vue index 8d696da77..e1e05f8e1 100644 --- a/src/components/FormFields/ProtocolSelector/index.vue +++ b/src/components/FormFields/ProtocolSelector/index.vue @@ -11,7 +11,7 @@ @@ -26,7 +26,7 @@
+ @@ -143,17 +152,33 @@ export default { this.$log.debug('Items: ', this.items) }, methods: { + handleSettingConfirm() { + if (this.settingItem.primary) { + const others = this.items.filter(item => item.name !== this.settingItem.name).map(item => { + item.primary = false + return item + }) + this.items = [this.settingItem, ...others] + } + console.log('handleSettingConfirm', this.settingItem) + }, handleDelete(index) { this.items = this.items.filter((value, i) => { return i !== index }) }, - cannotDelete(item) { + disableDelete(item) { + if (this.items.length === 1) { + return true + } const full = this.iChoices.find(choice => { return choice.name === item.name }) return full?.primary || full?.required }, + disableAdd(item) { + return this.remainProtocols.length === 0 || !item.port + }, handleAdd(index) { this.items.push({ ...this.remainProtocols[0] }) }, @@ -162,9 +187,25 @@ export default { item.name = selected.name item.port = selected.port }, + setPrimaryIfNeed(items) { + // 如果没有设置主协议,设置第一个为主协议 + if (!this.settingReadonly) { + const primary = items.filter(item => item.primary) + if (primary.length === 0) { + items[0].primary = true + items[0].default = true + items[0].required = true + } else if (primary.length > 1) { + primary.slice(1, primary.length).forEach(item => { + item.primary = false + }) + } + } + }, setDefaultItems(choices) { - this.items = [] + let items = [] const requiredItems = choices.filter(item => (item.required || item.primary)) + if (this.value instanceof Array && this.value.length > 0) { const protocols = [] this.value.forEach(item => { @@ -180,11 +221,12 @@ export default { const notFound = requiredItems.filter(item => !protocols.find(p => p.name === item.name)) protocols.push(...notFound) const allProtocolNames = protocols.map(item => item.name) - this.items = protocols.filter(item => allProtocolNames.indexOf(item.name) !== -1) + items = protocols.filter(item => allProtocolNames.indexOf(item.name) !== -1) } else { const defaults = choices.filter(item => (item.required || item.primary || item.default)) - this.items = defaults + items = defaults } + this.items = items }, getAssetDefaultItems(item, choices) { const protocols = [] diff --git a/src/i18n/langs/en.json b/src/i18n/langs/en.json index 21f73821d..167614a21 100644 --- a/src/i18n/langs/en.json +++ b/src/i18n/langs/en.json @@ -330,7 +330,7 @@ "primary": "primary", "primaryOnly": "There can only be one main agreement", "Required": "Required", - "RequiredProtocols": "Required agreement, which must be selected when adding assets", + "RequiredProtocol": "Required agreement, which must be selected when adding assets", "Default": "Default", "DefaultProtocol": "Default agreement, which will be selected by default when adding assets", "LoginConfig": "Login config", diff --git a/src/i18n/langs/ja.json b/src/i18n/langs/ja.json index 7ca978f11..a52847234 100644 --- a/src/i18n/langs/ja.json +++ b/src/i18n/langs/ja.json @@ -323,7 +323,7 @@ "primary": "メジャー", "primaryOnly": "主な合意は、1つだけあります", "Required": "必須", - "RequiredProtocols": "必要なプロトコル、資産の追加時に選択する必要があります", + "RequiredProtocol": "必要なプロトコル、資産の追加時に選択する必要があります", "Default": "デフォルト", "DefaultProtocol": "デフォルトのプロトコル、資産の追加時にデフォルトで選択", "LoginConfig": "ログイン構成", diff --git a/src/i18n/langs/zh.json b/src/i18n/langs/zh.json index 13f1410fd..c208993bc 100644 --- a/src/i18n/langs/zh.json +++ b/src/i18n/langs/zh.json @@ -335,12 +335,12 @@ "PlatformDetail": "平台详情", "ProtocolsGroup": "协议", "DefaultPort": "默认端口", - "primary": "主要的", - "primaryOnly": "主要的协议, 只能有一个", + "Primary": "主要的", + "PrimaryProtocol": "主要协议, 资产最基本最常用的协议,只能且必须设置一个", "Required": "必需的", - "RequiredProtocols": "必需的协议, 添加资产时必须选择", + "RequiredProtocol": "必需协议, 添加资产时必须选择, 可以设置多个", "Default": "默认的", - "DefaultProtocol": "默认的协议, 添加资产时默认会选择", + "DefaultProtocol": "默认协议, 添加资产时默认会选择", "LoginConfig": "登录配置", "UserNameSelector": "用户名输入框选择器", "PasswordSelector": "密码输入框选择器", diff --git a/src/views/assets/Platform/PlatformCreateUpdate.vue b/src/views/assets/Platform/PlatformCreateUpdate.vue index de237cdbd..0e3610d6b 100644 --- a/src/views/assets/Platform/PlatformCreateUpdate.vue +++ b/src/views/assets/Platform/PlatformCreateUpdate.vue @@ -124,7 +124,6 @@ export default { if (constraints['charset_enabled'] === false) { this.fieldsMeta.charset.hidden = () => true } - await setAutomations(this) } }