perf: 优化平台协议

This commit is contained in:
ibuler
2023-03-21 17:54:32 +08:00
parent 8432299660
commit 9e195dd1d9
6 changed files with 85 additions and 24 deletions

View File

@@ -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)
}
}
}

View File

@@ -11,7 +11,7 @@
<el-select
slot="prepend"
v-model="item.name"
:disabled="cannotDelete(item)"
:disabled="disableDelete(item)"
class="prepend"
@change="handleProtocolChange($event, item)"
>
@@ -26,7 +26,7 @@
</el-input>
<div v-if="!readonly" class="input-button" style="display: flex; margin-left: 20px">
<el-button
:disabled="cannotDelete(item)"
:disabled="disableDelete(item)"
icon="el-icon-minus"
size="mini"
style="flex-shrink: 0;"
@@ -35,7 +35,7 @@
/>
<el-button
v-if="index === items.length - 1"
:disabled="remainProtocols.length === 0 || !item.port"
:disabled="disableAdd(item, index)"
icon="el-icon-plus"
size="mini"
style="flex-shrink: 0;"
@@ -44,11 +44,20 @@
/>
</div>
</div>
<el-button
v-if="items.length === 0"
icon="el-icon-plus"
size="mini"
style="flex-shrink: 0;"
type="primary"
@click="handleAdd(0)"
/>
<ProtocolSettingDialog
v-if="showDialog"
:disabled="settingReadonly || readonly"
:item="settingItem"
:visible.sync="showDialog"
@confirm="handleSettingConfirm"
/>
</div>
</template>
@@ -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 = []

View File

@@ -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",

View File

@@ -323,7 +323,7 @@
"primary": "メジャー",
"primaryOnly": "主な合意は、1つだけあります",
"Required": "必須",
"RequiredProtocols": "必要なプロトコル、資産の追加時に選択する必要があります",
"RequiredProtocol": "必要なプロトコル、資産の追加時に選択する必要があります",
"Default": "デフォルト",
"DefaultProtocol": "デフォルトのプロトコル、資産の追加時にデフォルトで選択",
"LoginConfig": "ログイン構成",

View File

@@ -335,12 +335,12 @@
"PlatformDetail": "平台详情",
"ProtocolsGroup": "协议",
"DefaultPort": "默认端口",
"primary": "主要的",
"primaryOnly": "主要协议, 只能有一个",
"Primary": "主要的",
"PrimaryProtocol": "主要协议, 资产最基本最常用的协议,只能且必须设置一个",
"Required": "必需的",
"RequiredProtocols": "必需协议, 添加资产时必须选择",
"RequiredProtocol": "必需协议, 添加资产时必须选择, 可以设置多个",
"Default": "默认的",
"DefaultProtocol": "默认协议, 添加资产时默认会选择",
"DefaultProtocol": "默认协议, 添加资产时默认会选择",
"LoginConfig": "登录配置",
"UserNameSelector": "用户名输入框选择器",
"PasswordSelector": "密码输入框选择器",

View File

@@ -124,7 +124,6 @@ export default {
if (constraints['charset_enabled'] === false) {
this.fieldsMeta.charset.hidden = () => true
}
await setAutomations(this)
}
}