feat(功能): 完善部分功能及界面
This commit is contained in:
parent
f9cd176743
commit
bb17029279
@ -181,8 +181,6 @@
|
||||
<el-option v-for='group in systemGroups' :key='group.groupname' :label='group.groupname' :value='group.groupname' />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label='Shell'><el-input v-model='systemUserForm.shell' /></el-form-item>
|
||||
<el-form-item label='Home'><el-input v-model='systemUserForm.home_dir' placeholder='可为空' clearable /></el-form-item>
|
||||
</template>
|
||||
<template v-else>
|
||||
<el-form-item label='用户组'><el-input v-model='systemUserForm.groupname' /></el-form-item>
|
||||
@ -318,11 +316,7 @@
|
||||
<el-dialog v-model='protocolDialogVisible' :title='editingProtocolId ? "编辑协议" : "新增协议"' width='520px'>
|
||||
<el-form :model='protocolForm' label-width='90px'>
|
||||
<el-form-item label='协议名称'><el-input v-model='protocolForm.name' /></el-form-item>
|
||||
<el-form-item label='协议ID'><el-input-number v-model='protocolForm.bastion_protocol_id' :min='1'
|
||||
class='w-full' /></el-form-item>
|
||||
<el-form-item label='描述'><el-input v-model='protocolForm.description' /></el-form-item>
|
||||
<el-form-item label='排序'><el-input-number v-model='protocolForm.sort' :min='0' class='w-full' /></el-form-item>
|
||||
<el-form-item label='启用'><el-switch v-model='protocolForm.is_active' /></el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<el-button @click='protocolDialogVisible = false'>取消</el-button>
|
||||
@ -336,8 +330,6 @@
|
||||
</div>
|
||||
<el-table :data='softwareProtocol?.softwares || []' border>
|
||||
<el-table-column prop='name' label='软件名称' min-width='160' />
|
||||
<el-table-column prop='client_path' label='ClientPath' min-width='220' />
|
||||
<el-table-column prop='sort' label='排序' width='80' />
|
||||
<el-table-column label='启用' width='80'>
|
||||
<template #default='{ row }'><el-tag :type='row.is_active ? "success" : "info"'>{{ row.is_active ? '是' : '否'
|
||||
}}</el-tag></template>
|
||||
@ -351,17 +343,18 @@
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<template #footer>
|
||||
<el-button @click='softwareDialogVisible = false'>关闭</el-button>
|
||||
</template>
|
||||
</el-dialog>
|
||||
|
||||
<el-divider />
|
||||
<el-dialog v-model='softwareFormDialogVisible' :title='editingSoftwareId ? "编辑软件" : "新增软件"' width='520px'>
|
||||
<el-form :model='softwareForm' label-width='90px'>
|
||||
<el-form-item label='软件名称'><el-input v-model='softwareForm.name' /></el-form-item>
|
||||
<el-form-item label='ClientPath'><el-input v-model='softwareForm.client_path'
|
||||
placeholder='可为空' /></el-form-item>
|
||||
<el-form-item label='排序'><el-input-number v-model='softwareForm.sort' :min='0' class='w-full' /></el-form-item>
|
||||
<el-form-item label='启用'><el-switch v-model='softwareForm.is_active' /></el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<el-button @click='softwareDialogVisible = false'>关闭</el-button>
|
||||
<el-button @click='softwareFormDialogVisible = false'>取消</el-button>
|
||||
<el-button type='primary' :loading='opsSaving' @click='submitSoftware'>{{ editingSoftwareId ? '更新软件' : '新增软件'
|
||||
}}</el-button>
|
||||
</template>
|
||||
@ -390,6 +383,7 @@ const passwordDialogVisible = ref(false)
|
||||
const boundPasswordDialogVisible = ref(false)
|
||||
const protocolDialogVisible = ref(false)
|
||||
const softwareDialogVisible = ref(false)
|
||||
const softwareFormDialogVisible = ref(false)
|
||||
const savingPermissions = ref(false)
|
||||
const usingResource = ref(false)
|
||||
const copyingTempPassword = ref(false)
|
||||
@ -421,12 +415,12 @@ const opsSavedSelections = reactive<Record<string, number | null>>({})
|
||||
|
||||
const typeOptions = [{ label: '服务器', value: 'server' }, { label: '资源', value: 'resource' }]
|
||||
const form = reactive<any>({ type: 'server', name: '', display_name: '', parent_id: null, internal_ip: '', user_api_base_url: '', user_api_token: '', asset_id: null, account_id: null, protocol: '', allow_copy_temp_password: false, description: '', is_active: true })
|
||||
const systemUserForm = reactive<any>({ username: '', password: '', groups: [], shell: '/bin/bash', home_dir: '', groupname: '' })
|
||||
const systemUserForm = reactive<any>({ username: '', password: '', groups: [], groupname: '' })
|
||||
const useForm = reactive<any>({ protocol: 'SSH', account_name: '', password: '', remember: false, last_temp_password: '' })
|
||||
const passwordForm = reactive<any>({ password: '' })
|
||||
const boundPasswordForm = reactive<any>({ password: '' })
|
||||
const protocolForm = reactive<any>({ name: '', bastion_protocol_id: 2, description: '', sort: 0, is_active: true })
|
||||
const softwareForm = reactive<any>({ name: '', client_path: '', sort: 0, is_active: true })
|
||||
const protocolForm = reactive<any>({ name: '', description: '' })
|
||||
const softwareForm = reactive<any>({ name: '', is_active: true })
|
||||
const opsSelections = reactive<Record<string, number | null>>({})
|
||||
const systemUserGroupSelections = reactive<Record<string, string[]>>({})
|
||||
const systemUsers = ref<any[]>([])
|
||||
@ -775,13 +769,13 @@ function bindingLabel(username: string): string {
|
||||
|
||||
function openCreateSystemUser(): void {
|
||||
systemUserFormMode.value = 'user'
|
||||
Object.assign(systemUserForm, { username: '', password: '', groups: [], shell: '/bin/bash', home_dir: '', groupname: '' })
|
||||
Object.assign(systemUserForm, { username: '', password: '', groups: [], groupname: '' })
|
||||
systemUserFormVisible.value = true
|
||||
}
|
||||
|
||||
function openCreateSystemGroup(): void {
|
||||
systemUserFormMode.value = 'group'
|
||||
Object.assign(systemUserForm, { username: '', password: '', groups: [], shell: '/bin/bash', home_dir: '', groupname: '' })
|
||||
Object.assign(systemUserForm, { username: '', password: '', groups: [], groupname: '' })
|
||||
systemUserFormVisible.value = true
|
||||
}
|
||||
|
||||
@ -799,8 +793,6 @@ async function submitSystemUserForm(): Promise<void> {
|
||||
username: systemUserForm.username,
|
||||
password: systemUserForm.password,
|
||||
groups: systemUserForm.groups,
|
||||
shell: systemUserForm.shell || '/bin/bash',
|
||||
home_dir: systemUserForm.home_dir || null,
|
||||
})
|
||||
ElMessage.success('服务器用户创建成功')
|
||||
}
|
||||
@ -990,7 +982,7 @@ async function fetchOpsMeta(): Promise<void> {
|
||||
}
|
||||
|
||||
function resetProtocolForm(): void {
|
||||
Object.assign(protocolForm, { name: '', bastion_protocol_id: 2, description: '', sort: 0, is_active: true })
|
||||
Object.assign(protocolForm, { name: '', description: '' })
|
||||
}
|
||||
|
||||
function openCreateProtocol(): void {
|
||||
@ -1003,10 +995,7 @@ function openEditProtocol(row: any): void {
|
||||
editingProtocolId.value = row.id
|
||||
Object.assign(protocolForm, {
|
||||
name: row.name,
|
||||
bastion_protocol_id: row.bastion_protocol_id || 2,
|
||||
description: row.description || '',
|
||||
sort: row.sort || 0,
|
||||
is_active: Boolean(row.is_active),
|
||||
})
|
||||
protocolDialogVisible.value = true
|
||||
}
|
||||
@ -1016,10 +1005,7 @@ async function submitProtocol(): Promise<void> {
|
||||
try {
|
||||
const payload = {
|
||||
name: protocolForm.name,
|
||||
bastion_protocol_id: Number(protocolForm.bastion_protocol_id || 2),
|
||||
description: protocolForm.description || '',
|
||||
sort: protocolForm.sort || 0,
|
||||
is_active: Boolean(protocolForm.is_active),
|
||||
}
|
||||
if (editingProtocolId.value) {
|
||||
await serversApi.updateOpsProtocol(editingProtocolId.value, payload)
|
||||
@ -1047,27 +1033,28 @@ async function removeProtocol(row: any): Promise<void> {
|
||||
|
||||
function resetSoftwareForm(): void {
|
||||
editingSoftwareId.value = null
|
||||
Object.assign(softwareForm, { name: '', client_path: '', sort: 0, is_active: true })
|
||||
Object.assign(softwareForm, { name: '', is_active: true })
|
||||
}
|
||||
|
||||
function openSoftwareDialog(row: any): void {
|
||||
softwareProtocol.value = row
|
||||
resetSoftwareForm()
|
||||
softwareFormDialogVisible.value = false
|
||||
softwareDialogVisible.value = true
|
||||
}
|
||||
|
||||
function openCreateSoftware(): void {
|
||||
resetSoftwareForm()
|
||||
softwareFormDialogVisible.value = true
|
||||
}
|
||||
|
||||
function openEditSoftware(row: any): void {
|
||||
editingSoftwareId.value = row.id
|
||||
Object.assign(softwareForm, {
|
||||
name: row.name,
|
||||
client_path: row.client_path || '',
|
||||
sort: row.sort || 0,
|
||||
is_active: Boolean(row.is_active),
|
||||
})
|
||||
softwareFormDialogVisible.value = true
|
||||
}
|
||||
|
||||
async function submitSoftware(): Promise<void> {
|
||||
@ -1079,8 +1066,6 @@ async function submitSoftware(): Promise<void> {
|
||||
try {
|
||||
const payload = {
|
||||
name: softwareForm.name,
|
||||
client_path: softwareForm.client_path || '',
|
||||
sort: softwareForm.sort || 0,
|
||||
is_active: Boolean(softwareForm.is_active),
|
||||
}
|
||||
if (editingSoftwareId.value) {
|
||||
@ -1090,6 +1075,7 @@ async function submitSoftware(): Promise<void> {
|
||||
await serversApi.createOpsSoftware(softwareProtocol.value.id, payload)
|
||||
ElMessage.success('软件创建成功')
|
||||
}
|
||||
softwareFormDialogVisible.value = false
|
||||
resetSoftwareForm()
|
||||
await fetchOpsMeta()
|
||||
softwareProtocol.value = opsProtocols.value.find((item) => item.id === softwareProtocol.value?.id) || null
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user