mirror of
https://github.com/jumpserver/lina.git
synced 2025-04-28 03:20:24 +00:00
perf: update menu
This commit is contained in:
parent
83bb13b806
commit
7394ff27a5
@ -0,0 +1,10 @@
|
||||
{
|
||||
"editor.formatOnSave": true,
|
||||
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
||||
"[vue]": {
|
||||
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||
},
|
||||
"prettier.printWidth": 100,
|
||||
"prettier.singleAttributePerLine": true,
|
||||
"editor.wordWrap": "on"
|
||||
}
|
@ -422,7 +422,6 @@ export default {
|
||||
object = await this.getObjectDetail(this.iUrl, this.actionId)
|
||||
}
|
||||
}
|
||||
console.log('Object 2: ', object)
|
||||
if (object) {
|
||||
object = _.cloneDeep(object)
|
||||
this.$emit('update:object', object)
|
||||
@ -431,9 +430,11 @@ export default {
|
||||
return object
|
||||
},
|
||||
async getObjectDetail(url, id) {
|
||||
if (!id) {
|
||||
return
|
||||
}
|
||||
this.$log.debug('Get object detail: ', url)
|
||||
let data = await this.$axios.get(url, { params: { id }})
|
||||
console.log('Is array: ', Array.isArray(data))
|
||||
if (Array.isArray(data)) {
|
||||
data = {}
|
||||
}
|
||||
|
@ -2,7 +2,6 @@ import i18n from '@/i18n/i18n'
|
||||
import empty from '@/layout/empty'
|
||||
import XPackRoutes from './xpack'
|
||||
|
||||
const globalSubmenu = () => import('@/layout/globalOrg.vue')
|
||||
export default [
|
||||
{
|
||||
path: 'assets',
|
||||
@ -292,45 +291,6 @@ export default [
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
path: 'platforms',
|
||||
component: globalSubmenu,
|
||||
meta: {
|
||||
permissions: ['assets.view_platform'],
|
||||
resource: 'platform',
|
||||
icon: 'platform',
|
||||
disableOrgsChange: true
|
||||
},
|
||||
redirect: '',
|
||||
children: [
|
||||
{
|
||||
path: '',
|
||||
name: 'PlatformList',
|
||||
component: () => import('@/views/assets/Platform/PlatformList'),
|
||||
meta: { title: i18n.t('PlatformList') }
|
||||
},
|
||||
{
|
||||
path: 'create',
|
||||
component: () => import('@/views/assets/Platform/PlatformCreateUpdate.vue'), // Parent router-view
|
||||
name: 'PlatformCreate',
|
||||
hidden: true,
|
||||
meta: { title: i18n.t('PlatformCreate') }
|
||||
},
|
||||
{
|
||||
path: ':id/update',
|
||||
component: () => import('@/views/assets/Platform/PlatformCreateUpdate.vue'), // Parent router-view
|
||||
name: 'PlatformUpdate',
|
||||
hidden: true,
|
||||
meta: { title: i18n.t('PlatformUpdate'), permissions: [] }
|
||||
},
|
||||
{
|
||||
path: ':id',
|
||||
component: () => import('@/views/assets/Platform/PlatformDetail'), // Parent router-view
|
||||
name: 'PlatformDetail',
|
||||
hidden: true,
|
||||
meta: { title: i18n.t('PlatformDetail') }
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
...XPackRoutes
|
||||
]
|
||||
|
@ -1,8 +1,6 @@
|
||||
import i18n from '@/i18n/i18n'
|
||||
import empty from '@/layout/empty'
|
||||
|
||||
const globalSubmenu = () => import('@/layout/globalOrg.vue')
|
||||
|
||||
export default [
|
||||
{
|
||||
path: 'users',
|
||||
@ -91,64 +89,5 @@ export default [
|
||||
meta: { title: i18n.t('UserGroupDetail') }
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
path: 'roles',
|
||||
component: globalSubmenu,
|
||||
redirect: '',
|
||||
meta: {
|
||||
permissions: ['rbac.view_orgrole | rbac.view_systemrole'],
|
||||
app: 'rbac',
|
||||
disableOrgsChange: true,
|
||||
licenseRequired: true,
|
||||
icon: 'role'
|
||||
},
|
||||
children: [
|
||||
{
|
||||
path: '',
|
||||
component: () => import('@/views/users/Role/RoleList/index'),
|
||||
name: 'RoleList',
|
||||
meta: {
|
||||
title: i18n.t('RoleList'),
|
||||
app: 'rbac',
|
||||
permissions: ['rbac.view_orgrole | rbac.view_systemrole']
|
||||
}
|
||||
},
|
||||
{
|
||||
path: 'create',
|
||||
component: () => import('@/views/users/Role/RoleCreateUpdate'),
|
||||
name: 'RoleCreate',
|
||||
hidden: true,
|
||||
meta: {
|
||||
title: i18n.t('RoleCreate'),
|
||||
permissions: [],
|
||||
app: 'rbac',
|
||||
resource: 'role'
|
||||
}
|
||||
},
|
||||
{
|
||||
path: ':id/update',
|
||||
component: () => import('@/views/users/Role/RoleCreateUpdate'),
|
||||
name: 'RoleUpdate',
|
||||
hidden: true,
|
||||
meta: {
|
||||
title: i18n.t('RoleUpdate'),
|
||||
app: 'rbac',
|
||||
permissions: []
|
||||
}
|
||||
},
|
||||
{
|
||||
path: ':id',
|
||||
component: () => import('@/views/users/Role/RoleDetail/index'),
|
||||
name: 'RoleDetail',
|
||||
hidden: true,
|
||||
meta: {
|
||||
title: i18n.t('RoleDetail'),
|
||||
app: 'rbac',
|
||||
resource: 'role',
|
||||
permissions: []
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
|
@ -2,6 +2,7 @@ import i18n from '@/i18n/i18n'
|
||||
import empty from '@/layout/empty'
|
||||
|
||||
const Setting = () => import('@/views/settings/index')
|
||||
const globalSubmenu = () => import('@/layout/globalOrg.vue')
|
||||
|
||||
export default {
|
||||
path: '/settings',
|
||||
@ -86,6 +87,106 @@ export default {
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
path: '/settings/roles',
|
||||
component: globalSubmenu,
|
||||
redirect: '',
|
||||
meta: {
|
||||
permissions: ['rbac.view_orgrole | rbac.view_systemrole'],
|
||||
app: 'rbac',
|
||||
disableOrgsChange: true,
|
||||
licenseRequired: true,
|
||||
icon: 'role'
|
||||
},
|
||||
children: [
|
||||
{
|
||||
path: '',
|
||||
component: () => import('@/views/users/Role/RoleList/index'),
|
||||
name: 'RoleList',
|
||||
meta: {
|
||||
title: i18n.t('RoleList'),
|
||||
app: 'rbac',
|
||||
permissions: ['rbac.view_orgrole | rbac.view_systemrole']
|
||||
}
|
||||
},
|
||||
{
|
||||
path: 'create',
|
||||
component: () => import('@/views/users/Role/RoleCreateUpdate'),
|
||||
name: 'RoleCreate',
|
||||
hidden: true,
|
||||
meta: {
|
||||
title: i18n.t('RoleCreate'),
|
||||
permissions: [],
|
||||
app: 'rbac',
|
||||
resource: 'role'
|
||||
}
|
||||
},
|
||||
{
|
||||
path: ':id/update',
|
||||
component: () => import('@/views/users/Role/RoleCreateUpdate'),
|
||||
name: 'RoleUpdate',
|
||||
hidden: true,
|
||||
meta: {
|
||||
title: i18n.t('RoleUpdate'),
|
||||
app: 'rbac',
|
||||
permissions: []
|
||||
}
|
||||
},
|
||||
{
|
||||
path: ':id',
|
||||
component: () => import('@/views/users/Role/RoleDetail/index'),
|
||||
name: 'RoleDetail',
|
||||
hidden: true,
|
||||
meta: {
|
||||
title: i18n.t('RoleDetail'),
|
||||
app: 'rbac',
|
||||
resource: 'role',
|
||||
permissions: []
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
path: '/settings/platforms',
|
||||
component: globalSubmenu,
|
||||
meta: {
|
||||
permissions: ['assets.view_platform'],
|
||||
resource: 'platform',
|
||||
icon: 'platform',
|
||||
app: 'assets',
|
||||
disableOrgsChange: true
|
||||
},
|
||||
redirect: '',
|
||||
children: [
|
||||
{
|
||||
path: '',
|
||||
name: 'PlatformList',
|
||||
component: () => import('@/views/assets/Platform/PlatformList'),
|
||||
meta: { title: i18n.t('PlatformList'), permissions: ['assets.view_platform'] }
|
||||
},
|
||||
{
|
||||
path: 'create',
|
||||
component: () => import('@/views/assets/Platform/PlatformCreateUpdate.vue'), // Parent router-view
|
||||
name: 'PlatformCreate',
|
||||
hidden: true,
|
||||
meta: { title: i18n.t('PlatformCreate') }
|
||||
},
|
||||
{
|
||||
path: ':id/update',
|
||||
component: () => import('@/views/assets/Platform/PlatformCreateUpdate.vue'), // Parent router-view
|
||||
name: 'PlatformUpdate',
|
||||
hidden: true,
|
||||
meta: { title: i18n.t('PlatformUpdate'), permissions: [] }
|
||||
},
|
||||
{
|
||||
path: ':id',
|
||||
component: () => import('@/views/assets/Platform/PlatformDetail'), // Parent router-view
|
||||
name: 'PlatformDetail',
|
||||
hidden: true,
|
||||
meta: { title: i18n.t('PlatformDetail') }
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
path: '/settings/notification',
|
||||
name: 'Msg',
|
||||
|
@ -1,7 +1,11 @@
|
||||
<template>
|
||||
<span>
|
||||
<span v-if="iValue === '0'" class="risk-handler">
|
||||
<el-dropdown trigger="click" @command="handleDropdown" @visible-change="handleVisibleChange">
|
||||
<el-dropdown
|
||||
trigger="click"
|
||||
@command="handleDropdown"
|
||||
@visible-change="handleVisibleChange"
|
||||
>
|
||||
<el-button class="confirm action" size="mini">
|
||||
<i class="fa fa-check" />
|
||||
</el-button>
|
||||
@ -17,12 +21,21 @@
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
<el-tooltip :content="$tc('IgnoreAlert')" :open-delay="400">
|
||||
<el-button class="ignore action" size="mini" @click="handleDropdown('ignore')">
|
||||
<el-button
|
||||
class="ignore action"
|
||||
size="mini"
|
||||
@click="handleDropdown('ignore')"
|
||||
>
|
||||
<svg-icon icon-class="ignore" />
|
||||
</el-button>
|
||||
</el-tooltip>
|
||||
</span>
|
||||
<el-tooltip v-else :content="iLabel" :open-delay="400" class="platform-status">
|
||||
<el-tooltip
|
||||
v-else
|
||||
:content="iLabel"
|
||||
:open-delay="400"
|
||||
class="platform-status"
|
||||
>
|
||||
<el-button size="mini" type="text" @click="showDetail">
|
||||
<span class="detail-icon">
|
||||
<i v-if="iValue === '1'" class="fa fa-check-circle color-primary" />
|
||||
@ -41,11 +54,11 @@
|
||||
</span>
|
||||
</template>
|
||||
<script>
|
||||
import BaseFormatter from '@/components/Table/TableFormatters/base.vue'
|
||||
import ReviewDraw from '@/views/pam/RiskDetect/RiskHandlerFormatter/ReviewDrawer.vue'
|
||||
import ProcessingDialog from '@/components/Dialog/ProcessingDialog.vue'
|
||||
import { riskActions } from './const'
|
||||
import BaseFormatter from '@/components/Table/TableFormatters/base.vue'
|
||||
import { sleep } from '@/utils/time'
|
||||
import ReviewDraw from '@/views/pam/RiskDetect/RiskHandlerFormatter/ReviewDrawer.vue'
|
||||
import { riskActions } from './const'
|
||||
|
||||
export default {
|
||||
name: 'RiskSummaryFormatter',
|
||||
@ -74,7 +87,10 @@ export default {
|
||||
account: {},
|
||||
secretUrl: '',
|
||||
actions: [],
|
||||
formatterArgs: Object.assign(this.formatterArgsDefault, this.col.formatterArgs)
|
||||
formatterArgs: Object.assign(
|
||||
this.formatterArgsDefault,
|
||||
this.col.formatterArgs
|
||||
)
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
@ -135,7 +151,10 @@ export default {
|
||||
row.status = { value: '3', label: this.$t('Processing') }
|
||||
let risk = {}
|
||||
try {
|
||||
risk = await this.$axios.post(`/api/v1/accounts/account-risks/handle/`, data)
|
||||
risk = await this.$axios.post(
|
||||
`/api/v1/accounts/account-risks/handle/`,
|
||||
data
|
||||
)
|
||||
} catch (e) {
|
||||
row.status = { value: '4', label: this.$t('Failed') }
|
||||
this.$emit('processDone', { index: i, row })
|
||||
@ -206,7 +225,7 @@ export default {
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang='scss' scoped>
|
||||
<style lang="scss" scoped>
|
||||
.action.el-button--mini {
|
||||
cursor: pointer;
|
||||
padding: 1px 4px;
|
||||
@ -236,5 +255,4 @@ export default {
|
||||
padding: 20px;
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
@ -17,8 +17,15 @@ export default {
|
||||
tableConfig: {
|
||||
url: '/api/v1/ops/tasks/',
|
||||
columns: [
|
||||
'name', 'queue', 'count', 'state', 'date_last_publish', 'exec_cycle', 'next_exec_time', 'enabled'
|
||||
'name', 'queue', 'count', 'state', 'date_last_publish',
|
||||
'exec_cycle', 'next_exec_time', 'enabled'
|
||||
],
|
||||
columnsShow: {
|
||||
default: [
|
||||
'name', 'count', 'state', 'date_last_publish',
|
||||
'exec_cycle', 'next_exec_time', 'enabled'
|
||||
]
|
||||
},
|
||||
columnsMeta: {
|
||||
name: {
|
||||
formatter: DetailFormatter,
|
||||
@ -69,8 +76,8 @@ export default {
|
||||
label: `${this.$t('Success')}/${this.$t('Total')}`,
|
||||
formatter: (row) => {
|
||||
return <div>
|
||||
<span Class='text-primary'>{row.summary.success}</span>/
|
||||
<span>{row.summary.total}</span>
|
||||
<span Class='text-primary'>{row.summary.success || 0}</span>/
|
||||
<span>{row.summary.total || 0}</span>
|
||||
</div>
|
||||
}
|
||||
},
|
||||
@ -107,7 +114,7 @@ export default {
|
||||
},
|
||||
enabled: {
|
||||
width: '120px',
|
||||
label: `${this.$t('Enable')}/${this.$t('Disable')}`,
|
||||
label: `${this.$t('Enable')}`,
|
||||
formatter: SwitchFormatter,
|
||||
formatterArgs: {
|
||||
isDisplay(row) {
|
||||
|
@ -21,6 +21,7 @@ export default {
|
||||
return {
|
||||
group: { name: '', comment: '', users: [] },
|
||||
config: {
|
||||
url: '/api/v1/users/groups/',
|
||||
activeMenu: 'GroupInfo',
|
||||
submenu: [
|
||||
{
|
||||
|
@ -1,10 +1,17 @@
|
||||
<template>
|
||||
<GenericListPage ref="listPage" :header-actions="headerActions" :table-config="tableConfig" />
|
||||
<GenericListPage
|
||||
ref="listPage"
|
||||
:create-drawer="createDrawer"
|
||||
:detail-drawer="detailDrawer"
|
||||
:header-actions="headerActions"
|
||||
:resource="$t('Group')"
|
||||
:table-config="tableConfig"
|
||||
/>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { GenericListPage } from '@/layout///components'
|
||||
import AmountFormatter from '@/components/Table/TableFormatters/AmountFormatter.vue'
|
||||
import { GenericListPage } from '@/layout/components'
|
||||
|
||||
export default {
|
||||
components: {
|
||||
@ -12,6 +19,8 @@ export default {
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
createDrawer: () => import('./UserGroupCreateUpdate.vue'),
|
||||
detailDrawer: () => import('./UserGroupDetail/index.vue'),
|
||||
tableConfig: {
|
||||
url: '/api/v1/users/groups/',
|
||||
columns: ['name', 'users_amount', 'comment', 'actions'],
|
||||
@ -26,17 +35,6 @@ export default {
|
||||
async: true,
|
||||
getItem(item) {
|
||||
return item.is_service_account ? null : item.name
|
||||
},
|
||||
getRoute({ row }) {
|
||||
return {
|
||||
name: 'UserGroupDetail',
|
||||
params: {
|
||||
id: row.id
|
||||
},
|
||||
query: {
|
||||
tab: 'GroupUser'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<div>
|
||||
<GenericListDrawerPage
|
||||
<GenericListPage
|
||||
ref="GenericListPage"
|
||||
:header-actions="headerActions"
|
||||
:quick-filters="quickFilters"
|
||||
@ -13,23 +13,25 @@
|
||||
:visible.sync="updateSelectedDialogSetting.visible"
|
||||
@update="handleDialogUpdate"
|
||||
/>
|
||||
<InviteUsersDialog :setting="InviteDialogSetting" @close="handleInviteDialogClose" />
|
||||
<InviteUsersDialog
|
||||
:setting="InviteDialogSetting"
|
||||
@close="handleInviteDialogClose"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { mapGetters } from 'vuex'
|
||||
import { GenericUpdateFormDialog } from '@/layout/components'
|
||||
import GenericListDrawerPage from '@/layout/components/GenericListDrawerPage/index.vue'
|
||||
import { createSourceIdCache } from '@/api/common'
|
||||
import { GenericListPage, GenericUpdateFormDialog } from '@/layout/components'
|
||||
import AmountFormatter from '@/components/Table/TableFormatters/AmountFormatter.vue'
|
||||
import { mapGetters } from 'vuex'
|
||||
import { getDayFuture } from '@/utils/time'
|
||||
import InviteUsersDialog from './components/InviteUsersDialog'
|
||||
import AmountFormatter from '@/components/Table/TableFormatters/AmountFormatter.vue'
|
||||
|
||||
export default {
|
||||
components: {
|
||||
InviteUsersDialog,
|
||||
GenericListDrawerPage,
|
||||
GenericListPage,
|
||||
GenericUpdateFormDialog
|
||||
},
|
||||
data() {
|
||||
@ -79,7 +81,6 @@ export default {
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
],
|
||||
tableConfig: {
|
||||
url: '/api/v1/users/users/',
|
||||
@ -233,6 +234,17 @@ export default {
|
||||
callback: () => {
|
||||
this.InviteDialogSetting.InviteDialogVisible = true
|
||||
}
|
||||
},
|
||||
{
|
||||
name: this.$t('Roles'),
|
||||
title: this.$t('Roles'),
|
||||
has: () => {
|
||||
return this.publicSettings.XPACK_LICENSE_IS_VALID &&
|
||||
this.$hasPerm(['rbac.view_orgrole | rbac.view_systemrole'],)
|
||||
},
|
||||
callback: () => {
|
||||
this.$router.push({ name: 'RoleList' })
|
||||
}
|
||||
}
|
||||
],
|
||||
hasBulkUpdate: true,
|
||||
|
Loading…
Reference in New Issue
Block a user