perf: 修改系统用户列表

This commit is contained in:
ibuler
2022-07-19 18:03:16 +08:00
parent 90d737773d
commit 6388eed6e3
13 changed files with 132 additions and 414 deletions

View File

@@ -1,34 +0,0 @@
<template>
<component :is="systemUserProtocolComponent" :title="iTitle" />
</template>
<script>
import SSH from './ssh'
export default {
name: 'AdminUserCreate',
data() {
return {
}
},
computed: {
iTitle() {
const params = this.$route.params
let title = ''
if (params.id) {
title = this.$t('route.SystemUserUpdate')
} else {
title = this.$t('route.SystemUserCreate')
}
return title + '-' + this.$t('assets.AdminUser')
},
systemUserProtocolComponent() {
return SSH
}
}
}
</script>
<style scoped>
</style>

View File

@@ -1,94 +0,0 @@
<template>
<GenericCreateUpdatePage
:fields="fields"
:initial="initial"
:fields-meta="fieldsMeta"
:url="url"
:clean-form-value="cleanFormValue"
v-bind="$attrs"
/>
</template>
<script>
import GenericCreateUpdatePage from '@/layout/components/GenericCreateUpdatePage'
import getFields from '../fields'
import { UploadKey } from '@/components'
import { Required } from '@/components/DataForm/rules'
import { UpdateToken } from '@/components/FormFields'
export default {
name: 'AdminUserSSH',
components: { GenericCreateUpdatePage },
data() {
const fields = getFields.bind(this)()
return {
url: '/api/v1/assets/admin-users/',
initial: {
},
fields: [
[this.$t('common.Basic'), ['name', 'protocol', 'username', 'type']],
[this.$t('common.Auth'), ['password', 'private_key', 'passphrase']],
[this.$t('common.Command filter'), ['cmd_filters']],
[this.$t('assets.UserSwitch'), ['su_enabled', 'su_from']],
[this.$t('common.Other'), ['priority', 'sftp_root', 'comment']]
],
fieldsMeta: {
name: {
el: {
placeholder: this.$t('common.Name')
}
},
type: {
hidden() {
return true
}
},
username: {
el: {
placeholder: this.$t('common.Username')
},
rules: [Required]
},
protocol: {
el: {
style: 'width:100%',
disabled: true
}
},
password: {
helpText: this.$t('common.passwordOrPassphrase'),
component: UpdateToken,
hidden: (formValue) => {
if (!this.$route.params.id) {
return false
}
}
},
passphrase: {
component: UpdateToken
},
private_key: {
component: UploadKey
},
sftp_root: {
rules: [Required],
helpText: this.$t('assets.SFTPHelpMessage')
},
cmd_filters: fields.cmd_filters,
su_enabled: fields.su_enabled,
su_from: fields.su_from
},
cleanFormValue: (values) => {
values['type'] = 'admin'
return values
}
}
},
method: {
}
}
</script>
<style lang='less' scoped>
</style>

View File

@@ -1,65 +0,0 @@
<template>
<component :is="systemUserProtocolComponent" :title="iTitle" />
</template>
<script>
import SSH from './ssh'
import RDP from './rdp'
import VNC from './vnc'
import Database from './database'
import K8S from './k8s'
import TELNET from './telnet'
export default {
name: 'SystemUserCreateUpdate',
components: { SSH, RDP, VNC, Database },
data() {
return {
}
},
method: {
},
computed: {
iTitle() {
const params = this.$route.params
let title = ''
if (params.id) {
title = this.$t('route.SystemUserUpdate')
} else {
title = this.$t('route.SystemUserCreate')
}
return title + '-' + this.$t('assets.CommonUser')
},
systemUserProtocolComponent() {
const query = this.$route.query
const protocol = query.protocol
switch (protocol) {
case 'ssh':
return SSH
case 'rdp':
return RDP
case 'vnc':
return VNC
case 'telnet':
return TELNET
case 'mysql':
case 'oracle':
case 'postgresql':
case 'mariadb':
case 'sqlserver':
case 'redis':
case 'mongodb':
return Database
case 'k8s':
return K8S
default:
return SSH
}
}
}
}
</script>
<style lang='less' scoped>
</style>

View File

@@ -10,7 +10,7 @@
<script>
import GenericCreateUpdatePage from '@/layout/components/GenericCreateUpdatePage'
import getFields from '../fields'
import getFields from './fields'
export default {
name: 'CommonUserDatabase',

View File

@@ -1,22 +1,59 @@
<template>
<component :is="systemUserTypeComponent" />
<component :is="systemUserProtocolComponent" :title="iTitle" />
</template>
<script>
import CommonUser from './CommonUser/index'
import AdminUser from './AdminUser/index'
import SSH from './ssh'
import RDP from './rdp'
import VNC from './vnc'
import Database from './database'
import K8S from './k8s'
import TELNET from './telnet'
export default {
name: 'SystemUserCreateUpdate',
components: { CommonUser, AdminUser },
components: { SSH, RDP, VNC, Database },
data() {
return {
}
},
method: {
},
computed: {
systemUserTypeComponent() {
const query = this.$route.query
const type = query.type || 'common'
if (type === 'admin') {
return AdminUser
iTitle() {
const params = this.$route.params
let title = ''
if (params.id) {
title = this.$t('route.SystemUserUpdate')
} else {
return CommonUser
title = this.$t('route.SystemUserCreate')
}
return title + '-' + this.$t('assets.CommonUser')
},
systemUserProtocolComponent() {
const query = this.$route.query
const protocol = query.protocol
switch (protocol) {
case 'ssh':
return SSH
case 'rdp':
return RDP
case 'vnc':
return VNC
case 'telnet':
return TELNET
case 'mysql':
case 'oracle':
case 'postgresql':
case 'mariadb':
case 'sqlserver':
case 'redis':
case 'mongodb':
return Database
case 'k8s':
return K8S
default:
return SSH
}
}
}

View File

@@ -11,7 +11,7 @@
<script>
import GenericCreateUpdatePage from '@/layout/components/GenericCreateUpdatePage'
import { Required } from '@/components/DataForm/rules'
import getFields from '@/views/assets/SystemUser/SystemUserCreateUpdate/fields'
import getFields from './fields'
export default {
name: 'CommonUserSSH',

View File

@@ -10,7 +10,7 @@
<script>
import GenericCreateUpdatePage from '@/layout/components/GenericCreateUpdatePage'
import getFields from '../fields'
import getFields from './fields'
export default {
name: 'CommonUserRDP',
@@ -24,7 +24,6 @@ export default {
username_same_with_user: false,
auto_generate_key: false,
auto_push_account: false,
sudo: '/bin/whoami',
shell: '/bin/bash'
},
fields: [

View File

@@ -12,7 +12,7 @@
<script>
import GenericCreateUpdatePage from '@/layout/components/GenericCreateUpdatePage'
import { Required } from '@/components/DataForm/rules'
import getFields from '../fields'
import getFields from './fields'
export default {
name: 'CommonUserSSH',

View File

@@ -10,7 +10,7 @@
<script>
import GenericCreateUpdatePage from '@/layout/components/GenericCreateUpdatePage'
import getFields from '../fields'
import getFields from './fields'
export default {
name: 'CommonUserTelnet',

View File

@@ -10,7 +10,7 @@
<script>
import GenericCreateUpdatePage from '@/layout/components/GenericCreateUpdatePage'
import getFields from '../fields'
import getFields from './fields'
export default {
name: 'CommonUserVNC',

View File

@@ -1,80 +0,0 @@
<template>
<div>
<el-alert v-if="helpMessage" type="success">
<span v-html="helpMessage" />
</el-alert>
<GenericListTable :table-config="tableConfig" :header-actions="headerActions" :help-message="helpMessage" />
</div>
</template>
<script>
import { GenericListTable } from '@/layout/components'
export default {
components: {
GenericListTable
},
data() {
const vm = this
return {
tableConfig: {
url: '/api/v1/assets/admin-users/',
permissions: {
resource: 'systemuser'
},
columns: [
'name', 'username', 'assets_amount',
'created_by', 'date_created', 'date_updated', 'comment', 'org_name', 'actions'
],
columnsShow: {
min: ['name', 'actions'],
default: ['name', 'username', 'assets_amount', 'comment', 'actions']
},
columnsMeta: {
username: {
showOverflowTooltip: true
},
assets_amount: {
width: '80px'
},
actions: {
formatterArgs: {
onUpdate: ({ row }) => {
vm.$router.push({
name: 'SystemUserUpdate',
params: { id: row.id },
query: { protocol: row.protocol, type: 'admin' }
})
},
onClone: ({ row }) => {
vm.$router.push({
name: 'SystemUserCreate',
query: { protocol: row.protocol, type: 'admin', clone_from: row.id }
})
}
}
}
}
},
headerActions: {
searchConfig: {
getUrlQuery: false
},
createRoute: () => {
return {
name: 'SystemUserCreate',
query: {
type: 'admin'
}
}
}
},
helpMessage: this.$t('assets.AdminUserListHelpMessage')
}
}
}
</script>
<style>
</style>

View File

@@ -1,98 +0,0 @@
<template>
<div>
<el-alert v-if="helpMessage" type="success">
<span v-html="helpMessage" />
</el-alert>
<GenericListTable :table-config="tableConfig" :header-actions="headerActions" :help-message="helpMessage" />
</div>
</template>
<script>
import { GenericListTable } from '@/layout/components'
import { ApplicationSystemUserTypes } from '@/views/applications/const'
import { AssetProtocols } from '@/views/assets/const'
export default {
components: {
GenericListTable
},
data() {
const vm = this
return {
tableConfig: {
url: '/api/v1/assets/system-users/?type=common',
columns: [
'name', 'username', 'username_same_with_user', 'protocol', 'login_mode',
'assets_amount', 'applications_amount', 'priority',
'created_by', 'date_created', 'date_updated', 'comment', 'org_name', 'actions'
],
columnsShow: {
min: ['name', 'actions'],
default: [
'name', 'username', 'protocol', 'login_mode', 'assets_amount',
'applications_amount', 'comment', 'actions'
]
},
columnsMeta: {
username: {
showOverflowTooltip: true
},
protocol: {
width: '100px'
},
username_same_with_user: {
width: '150px',
formatterArgs: {
showFalse: false
}
},
login_mode: {
width: '120px'
},
assets_amount: {
width: '80px'
},
applications_amount: {
width: '80px'
},
actions: {
formatterArgs: {
onUpdate: ({ row }) => {
vm.$router.push({
name: 'SystemUserUpdate', params: { id: row.id }, query: { protocol: row.protocol }
})
},
onClone: ({ row }) => {
vm.$router.push({
name: 'SystemUserCreate', query: { protocol: row.protocol, clone_from: row.id }
})
}
}
}
}
},
headerActions: {
hasCreate: false,
createRoute: 'SystemUserCreate',
searchConfig: {
exclude: ['type', 'protocol']
},
moreCreates: {
callback: (option) => {
vm.$router.push({ name: 'SystemUserCreate', query: { protocol: option.name.toLowerCase() }})
},
dropdown: [
...AssetProtocols,
...ApplicationSystemUserTypes
]
}
},
helpMessage: this.$t('assets.SystemUserListHelpMessage')
}
}
}
</script>
<style>
</style>

View File

@@ -1,44 +1,97 @@
<template>
<TabPage :active-menu.sync="config.activeMenu" :submenu="config.submenu">
<keep-alive>
<component :is="config.activeMenu" />
</keep-alive>
</TabPage>
<GenericListPage
:table-config="tableConfig"
:header-actions="headerActions"
:help-message="helpMessage"
/>
</template>
<script>
import { TabPage } from '@/layout/components'
import CommonUserList from './CommonUserList'
import AdminUserList from './AdminUserList'
import { GenericListPage } from '@/layout/components'
import { ApplicationSystemUserTypes } from '@/views/applications/const'
import { AssetProtocols } from '@/views/assets/const'
export default {
name: 'Index',
components: {
TabPage,
CommonUserList,
AdminUserList
GenericListPage
},
data() {
const vm = this
return {
config: {
activeMenu: 'CommonUserList',
submenu: [
{
title: this.$t('assets.CommonUser'),
name: 'CommonUserList',
hidden: () => !this.$hasPerm('assets.view_systemuser')
tableConfig: {
url: '/api/v1/assets/system-users/?type=common',
columns: [
'name', 'username', 'username_same_with_user', 'protocol', 'login_mode',
'assets_amount', 'applications_amount', 'priority',
'created_by', 'date_created', 'date_updated', 'comment', 'org_name', 'actions'
],
columnsShow: {
min: ['name', 'actions'],
default: [
'name', 'username', 'protocol', 'login_mode', 'assets_amount',
'applications_amount', 'comment', 'actions'
]
},
columnsMeta: {
username: {
showOverflowTooltip: true
},
{
title: this.$t('assets.AdminUser'),
name: 'AdminUserList',
hidden: () => !this.$hasPerm('assets.view_systemuser')
protocol: {
width: '100px'
},
username_same_with_user: {
width: '150px',
formatterArgs: {
showFalse: false
}
},
login_mode: {
width: '120px'
},
assets_amount: {
width: '80px'
},
applications_amount: {
width: '80px'
},
actions: {
formatterArgs: {
onUpdate: ({ row }) => {
vm.$router.push({
name: 'SystemUserUpdate', params: { id: row.id }, query: { protocol: row.protocol }
})
},
onClone: ({ row }) => {
vm.$router.push({
name: 'SystemUserCreate', query: { protocol: row.protocol, clone_from: row.id }
})
}
}
}
]
}
}
},
headerActions: {
hasCreate: false,
createRoute: 'SystemUserCreate',
searchConfig: {
exclude: ['type', 'protocol']
},
moreCreates: {
callback: (option) => {
vm.$router.push({ name: 'SystemUserCreate', query: { protocol: option.name.toLowerCase() }})
},
dropdown: [
...AssetProtocols,
...ApplicationSystemUserTypes
]
}
},
helpMessage: this.$t('assets.SystemUserListHelpMessage')
}
}
}
</script>
<style scoped>
<style>
</style>