mirror of
https://github.com/jumpserver/lina.git
synced 2026-01-19 08:16:42 +00:00
perf: 优化平台协议
This commit is contained in:
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 = []
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -323,7 +323,7 @@
|
||||
"primary": "メジャー",
|
||||
"primaryOnly": "主な合意は、1つだけあります",
|
||||
"Required": "必須",
|
||||
"RequiredProtocols": "必要なプロトコル、資産の追加時に選択する必要があります",
|
||||
"RequiredProtocol": "必要なプロトコル、資産の追加時に選択する必要があります",
|
||||
"Default": "デフォルト",
|
||||
"DefaultProtocol": "デフォルトのプロトコル、資産の追加時にデフォルトで選択",
|
||||
"LoginConfig": "ログイン構成",
|
||||
|
||||
@@ -335,12 +335,12 @@
|
||||
"PlatformDetail": "平台详情",
|
||||
"ProtocolsGroup": "协议",
|
||||
"DefaultPort": "默认端口",
|
||||
"primary": "主要的",
|
||||
"primaryOnly": "主要的协议, 只能有一个",
|
||||
"Primary": "主要的",
|
||||
"PrimaryProtocol": "主要协议, 资产最基本最常用的协议,只能且必须设置一个",
|
||||
"Required": "必需的",
|
||||
"RequiredProtocols": "必需的协议, 添加资产时必须选择",
|
||||
"RequiredProtocol": "必需协议, 添加资产时必须选择, 可以设置多个",
|
||||
"Default": "默认的",
|
||||
"DefaultProtocol": "默认的协议, 添加资产时默认会选择",
|
||||
"DefaultProtocol": "默认协议, 添加资产时默认会选择",
|
||||
"LoginConfig": "登录配置",
|
||||
"UserNameSelector": "用户名输入框选择器",
|
||||
"PasswordSelector": "密码输入框选择器",
|
||||
|
||||
@@ -124,7 +124,6 @@ export default {
|
||||
if (constraints['charset_enabled'] === false) {
|
||||
this.fieldsMeta.charset.hidden = () => true
|
||||
}
|
||||
|
||||
await setAutomations(this)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user