perf: update menu

This commit is contained in:
ibuler 2025-01-21 17:48:44 +08:00
parent 83bb13b806
commit 7394ff27a5
10 changed files with 186 additions and 139 deletions

View File

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

View File

@ -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 = {}
}

View File

@ -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
]

View File

@ -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: []
}
}
]
}
]

View File

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

View File

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

View File

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

View File

@ -21,6 +21,7 @@ export default {
return {
group: { name: '', comment: '', users: [] },
config: {
url: '/api/v1/users/groups/',
activeMenu: 'GroupInfo',
submenu: [
{

View File

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

View File

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