[Update] 拆分路由

This commit is contained in:
ibuler
2020-04-29 20:47:54 +08:00
12 changed files with 483 additions and 297 deletions

View File

@@ -0,0 +1,168 @@
<template>
<div>
<Dialog :title="$tc('Export')" :visible.sync="showExportDialog" center @confirm="handleDialogConfirm('export')" @cancel="handleDialogCancel('export')">
<el-form>
<el-form-item :label="this.$t('action.ExportRange')" :label-width="'100px'">
<el-radio v-model="exportOption" class="export-item" label="1">{{ this.$t('action.ExportAll') }}</el-radio>
<el-radio v-model="exportOption" class="export-item" label="2">{{ this.$t('action.ExportOnlySelectedItems') }}</el-radio>
<!-- <el-radio v-model="exportOption" class="export-item" label="3">仅导出搜索项</el-radio> -->
</el-form-item>
</el-form>
</Dialog>
<Dialog :title="importTitle" :visible.sync="showImportDialog" center @confirm="handleDialogConfirm('import')" @cancel="handleDialogCancel('import')">
<el-form>
<el-form-item :label="importTitle" :label-width="'100px'">
<el-radio v-model="importOption" class="export-item" label="1">{{ this.$tc('Import') }}</el-radio>
<el-radio v-model="importOption" class="export-item" label="2">{{ this.$tc('Update') }}</el-radio>
</el-form-item>
</el-form>
<div v-if="importOption==='1'" style="margin-bottom:20px;margin-left: 55px;">{{ this.$t('action.DownloadTheImportedTemplateOrUseTheExportedCSVFormat') }} <a style="color: #428bca;" :href="downloadImportTempUrl">{{ this.$t('action.DownloadImportTemplate') }}</a></div>
<div v-else style="margin-bottom:20px;margin-left: 55px;">{{ this.$t('action.DownloadTheUpdatedTemplateOrUsTheExportedCSVFormat') }} <a style="color: #428bca;" @click="downloadUpdateTempUrl">{{ this.$t('action.DownloadUpdateTemplate') }}</a></div>
<div style="margin-left:55px;">
<el-upload
class="upload-card"
action="string"
:http-request="upload"
list-type="text/csv"
:limit="1"
>
<el-button size="small" type="primary">{{ this.$t('action.Upload') }}</el-button>
<div slot="tip" class="el-upload__tip">{{ this.$t('action.OnlyCSVFilesCanBeUploaded') }}</div>
</el-upload>
</div>
</Dialog>
</div>
</template>
<script>
import Dialog from '../Dialog'
import { createSourceIdCache } from '@/api/common'
export default {
name: 'DialogAction',
components: {
Dialog
},
props: {
selectedRows: {
type: Array,
default: () => []
},
url: {
type: String,
default: () => ''
}
},
data() {
return {
showExportDialog: false,
showImportDialog: false,
importOption: '1',
exportOption: '1',
meta: {}
}
},
computed: {
hasSelected() {
return this.selectedRows.length > 0
},
importTitle() {
if (this.importOption === '1') {
return this.$tc('Import')
} else {
return this.$tc('Update')
}
},
upLoadUrl() {
return this.url
},
downloadImportTempUrl() {
return process.env.VUE_APP_BASE_API + this.url + '?format=csv&template=import&limit=1'
}
},
mounted() {
this.$eventBus.$on('showExportDialog', (row) => {
this.showExportDialog = true
})
this.$eventBus.$on('showImportDialog', (row) => {
this.showImportDialog = true
})
},
methods: {
upload(item) {
this.$axios.put(
this.upLoadUrl,
item.file
).then((res) => {
console.log('')
})
},
downloadCsv(url) {
const a = document.createElement('a')
a.href = url
a.click()
window.URL.revokeObjectURL(url)
},
async handleExport() {
let data
var resources = []
if (this.exportOption === '1') {
data = this.$parent.$parent.$refs.dataTable.$refs.dataTable.getData()
} else if (this.exportOption === '2') {
data = this.selectedRows
} else {
data = []
}
for (let index = 0; index < data.length; index++) {
resources.push(data[index].id)
}
const spm = await createSourceIdCache(resources)
const url = process.env.VUE_APP_BASE_API + `${this.url}?format=csv&?spm=` + spm.spm
return this.downloadCsv(url)
},
handleImport() {
},
async downloadUpdateTempUrl() {
var resources = []
const data = this.$parent.$parent.$refs.dataTable.$refs.dataTable.getData()
for (let index = 0; index < data.length; index++) {
resources.push(data[index].id)
}
const spm = await createSourceIdCache(resources)
const url = process.env.VUE_APP_BASE_API + `${this.url}?format=csv&template=update&spm=` + spm.spm
return this.downloadCsv(url)
},
async handleDialogConfirm(val) {
switch (val) {
case 'export':
await this.handleExport()
this.showExportDialog = false
break
case 'import':
await this.handleImport()
this.showImportDialog = false
break
default:
break
}
},
handleDialogCancel(val) {
switch (val) {
case 'export':
this.showExportDialog = false
break
case 'import':
this.showImportDialog = false
break
default:
break
}
}
}
}
</script>
<style lang='less' scoped>
</style>

View File

@@ -7,13 +7,16 @@
<div class="table-action-right-side">
<AutoDataSearch v-if="hasSearch" class="right-side-item action-search" :config="searchConfig" :url="tableUrl" @tagSearch="handleTagSearch" />
<ActionsGroup :is-fa="true" :actions="rightSideActions" class="right-side-actions right-side-item" />
<DialogAction :selected-rows="selectedRows" :url="tableUrl" />
</div>
</slot>
</div>
</template>
<script>
import AutoDataSearch from '@/components/AutoDataSearch'
import DialogAction from '@/components/DialogAction'
import ActionsGroup from '@/components/ActionsGroup'
import { createSourceIdCache } from '@/api/common'
import _ from 'lodash'
@@ -25,6 +28,7 @@ export default {
name: 'TableAction',
components: {
ActionsGroup,
DialogAction,
AutoDataSearch
},
props: {

View File

@@ -3,48 +3,14 @@
<TableAction :table-url="tableConfig.url" :search-table="search" v-bind="headerActions" :selected-rows="selectedRows" :reload-table="reloadTable" />
<IBox class="table-content">
<AutoDataTable :key="tableConfig.url" ref="dataTable" :config="tableConfig" @selection-change="handleSelectionChange" />
<Dialog :title="$tc('Export')" :visible.sync="showExportDialog" center @confirm="handleDialogConfirm('export')" @cancel="handleDialogCancel('export')">
<el-form>
<el-form-item :label="this.$t('action.ExportRange')" :label-width="'100px'">
<el-radio v-model="exportOption" class="export-item" label="1">{{ this.$t('action.ExportAll') }}</el-radio>
<el-radio v-model="exportOption" class="export-item" label="2">{{ this.$t('action.ExportOnlySelectedItems') }}</el-radio>
<!-- <el-radio v-model="exportOption" class="export-item" label="3">仅导出搜索项</el-radio> -->
</el-form-item>
</el-form>
</Dialog>
<Dialog :title="importTitle" :visible.sync="showImportDialog" center @confirm="handleDialogConfirm('import')" @cancel="handleDialogCancel('import')">
<el-form>
<el-form-item :label="importTitle" :label-width="'100px'">
<el-radio v-model="importOption" class="export-item" label="1">{{ this.$tc('Import') }}</el-radio>
<el-radio v-model="importOption" class="export-item" label="2">{{ this.$tc('Update') }}</el-radio>
</el-form-item>
</el-form>
<div v-if="importOption==='1'" style="margin-bottom:20px;margin-left: 55px;">{{ this.$t('action.DownloadTheImportedTemplateOrUseTheExportedCSVFormat') }} <a style="color: #428bca;" :href="downloadImportTempUrl">{{ this.$t('action.DownloadImportTemplate') }}</a></div>
<div v-else style="margin-bottom:20px;margin-left: 55px;">{{ this.$t('action.DownloadTheUpdatedTemplateOrUsTheExportedCSVFormat') }} <a style="color: #428bca;" @click="downloadUpdateTempUrl">{{ this.$t('action.DownloadUpdateTemplate') }}</a></div>
<div style="margin-left:55px;">
<el-upload
class="upload-card"
action="string"
:http-request="upload"
list-type="text/csv"
:limit="1"
>
<el-button size="small" type="primary">{{ this.$t('action.Upload') }}</el-button>
<div slot="tip" class="el-upload__tip">{{ this.$t('action.OnlyCSVFilesCanBeUploaded') }}</div>
</el-upload>
</div>
</Dialog>
</IBox>
</div>
</template>
<script>
import AutoDataTable from '../AutoDataTable'
import Dialog from '../Dialog'
import IBox from '../IBox'
import TableAction from './TableAction'
import { createSourceIdCache } from '@/api/common'
import Emitter from '@/mixins/emitter'
export default {
@@ -52,7 +18,6 @@ export default {
components: {
AutoDataTable,
TableAction,
Dialog,
IBox
},
mixins: [Emitter],
@@ -71,51 +36,10 @@ export default {
},
data() {
return {
selectedRows: [],
showExportDialog: false,
showImportDialog: false,
importOption: '1',
exportOption: '1',
meta: {}
selectedRows: []
}
},
computed: {
hasSelected() {
return this.selectedRows.length > 0
},
upLoadUrl() {
return this.tableConfig.url
},
importTitle() {
if (this.importOption === '1') { return this.$tc('Import') } else { return this.$tc('Update') }
},
downloadImportTempUrl() {
return process.env.VUE_APP_BASE_API + this.tableConfig.url + '?format=csv&template=import&limit=1'
}
},
mounted() {
this.$eventBus.$on('showExportDialog', (row) => {
this.showExportDialog = true
})
this.$eventBus.$on('showImportDialog', (row) => {
this.showImportDialog = true
})
},
methods: {
upload(item) {
this.$axios.put(
this.upLoadUrl,
item.file
).then((res) => {
console.log('')
})
},
downloadCsv(url) {
const a = document.createElement('a')
a.href = url
a.click()
window.URL.revokeObjectURL(url)
},
handleSelectionChange(val) {
this.selectedRows = val
var obj = {}
@@ -128,61 +52,6 @@ export default {
},
search(attrs) {
return this.$refs.dataTable.$refs.dataTable.search(attrs)
},
async handleExport() {
let data
var resources = []
if (this.exportOption === '1') {
data = this.$refs.dataTable.$refs.dataTable.getData()
} else if (this.exportOption === '2') {
data = this.selectedRows
} else {
data = []
}
for (let index = 0; index < data.length; index++) {
resources.push(data[index].id)
}
const spm = await createSourceIdCache(resources)
const url = process.env.VUE_APP_BASE_API + `${this.tableConfig.url}?format=csv&?spm=` + spm.spm
return this.downloadCsv(url)
},
handleImport() {
},
async downloadUpdateTempUrl() {
var resources = []
const data = this.$refs.dataTable.$refs.dataTable.getData()
for (let index = 0; index < data.length; index++) {
resources.push(data[index].id)
}
const spm = await createSourceIdCache(resources)
const url = process.env.VUE_APP_BASE_API + `${this.tableConfig.url}?format=csv&template=update&spm=` + spm.spm
return this.downloadCsv(url)
},
async handleDialogConfirm(val) {
switch (val) {
case 'export':
await this.handleExport()
this.showExportDialog = false
break
case 'import':
await this.handleImport()
this.showImportDialog = false
break
default:
break
}
},
handleDialogCancel(val) {
switch (val) {
case 'export':
this.showExportDialog = false
break
case 'import':
this.showImportDialog = false
break
default:
break
}
}
}
}

View File

@@ -76,7 +76,10 @@ const cn = {
'Active selected': '激活所选',
'rows': '行',
'Basic Info': '基本信息',
'Command filter': '命令过滤器',
'Add': '添加',
'Auth': '认证',
'Others': '其他',
'Members': '成员'
},
route: {

View File

@@ -32,6 +32,7 @@ import SessionsRoute from '@/views/sessions'
import OpsRoutes from '@/views/jobcenter'
import TicketsRoutes from '@/views/tickets'
import AuditsRoutes from '@/views/audits'
/**
* constantRoutes
* a base page that does not have permission requirements

View File

@@ -1,29 +1,20 @@
import Layout from '@/layout/index'
export default {
path: '/applications/',
component: Layout,
redirect: '/applications/remote-apps/',
name: 'applications',
meta: { title: 'Applications', icon: 'th' },
children: [
{
path: 'remote-apps',
name: 'RemoteAppList',
component: () => import('@/views/applications/RemoteAppList'),
meta: { title: 'RemoteApp' }
},
{
path: 'remote-apps/:id',
name: 'RemoteAppDetail',
component: () => import('@/views/applications/RemoteAppList'),
meta: { title: 'RemoteApp' }
},
{
path: 'database-apps',
name: 'DatabaseAppList',
component: () => import('@/views/applications/DatabaseAppList'),
meta: { title: 'DatabaseApp' }
}
]
}
export default [
{
path: 'remote-apps',
name: 'RemoteAppList',
component: () => import('@/views/applications/RemoteAppList'),
meta: { title: 'RemoteApp' }
},
{
path: 'remote-apps/:id',
name: 'RemoteAppDetail',
component: () => import('@/views/applications/RemoteAppList'),
meta: { title: 'RemoteApp' }
},
{
path: 'database-apps',
name: 'DatabaseAppList',
component: () => import('@/views/applications/DatabaseAppList'),
meta: { title: 'DatabaseApp' }
}
]

View File

@@ -16,10 +16,27 @@ export default {
},
fields: [
[this.$t('perms.' + 'Basic'), ['name', 'username', 'password', 'private_key', 'comment']]
['', ['name', 'username', 'password', 'private_key', 'comment']]
],
fieldsMeta: {
name: {
el: {
placeholder: this.$t('名称')
}
},
username: {
el: {
placeholder: this.$t('用户名')
}
},
password: {
helpText: this.$t('密码或密钥密码')
},
private_key: {
type: 'upload',
el: {
url: 'http://baiddu.com'
}
}
},
url: '/api/v1/assets/admin-users/'

View File

@@ -52,9 +52,10 @@ export default {
}
]
},
updateRoute: 'AdminUserUpdate',
headerActions: {
hasBulkDelete: false,
createRoute: 'AdminUserCreateUpdate'
createRoute: 'AdminUserCreate'
}
}
}

View File

@@ -49,6 +49,11 @@ export default {
},
headerActions: {
hasBulkDelete: false,
hasRightActions: false,
hasExport: false,
hasImport: false,
hasRefresh: true,
hasSearch: true,
createRoute: 'LabelCreate'
}
}

View File

@@ -0,0 +1,112 @@
<template>
<GenericCreateUpdatePage :fields="fields" :initial="initial" :fields-meta="fieldsMeta" :url="url" />
</template>
<script>
import GenericCreateUpdatePage from '@/layout/components/GenericCreateUpdatePage'
import select2 from '@/components/Select2'
export default {
name: 'SystemUserCreateUpdate',
components: { GenericCreateUpdatePage },
data() {
return {
initial: {
login_mode: 'auto',
priority: '20',
protocol: 'ssh',
username_same_with_user: false,
auto_generate_key: true,
auto_push: true,
sftp_root: 'tmp',
sudo: '/bin/whoami',
shell: '/bin/bash'
},
fields: [
[this.$tc('Basic Info'), ['name', 'login_mode', 'username', 'username_same_with_user', 'priority', 'protocol']],
[this.$tc('Auth'), ['auto_generate_key', 'password', 'auto_push']],
[this.$tc('Command filter'), ['cmd_filters']],
[this.$tc('Others'), ['sftp_root', 'sudo', 'shell', 'comment']]
],
fieldsMeta: {
login_mode: {
helpText: '如果选择手动登录模式,用户名和密码可以不填写'
},
username: {
el: {
disabled: false
}
},
username_same_with_user: {
type: 'switch',
helpText: '用户名是动态的,登录资产时使用当前用户的用户名登录',
hidden: (form) => {
this.fieldsMeta.username.el.disabled = form.username_same_with_user
return false
}
},
auto_generate_key: {
type: 'switch',
hidden: form => {
this.$router.params || form.login_mode !== 'auto'
}
},
protocol: {
rules: [
{ required: true }
],
el: {
style: 'width:100%'
}
},
cmd_filters: {
component: select2,
el: {
placeholder: '命令过滤器'
}
},
priority: {
rules: [
{ required: true }
],
helpText: '1-100, 1最低优先级100最高优先级。授权多个用户时高优先级的系统用户将会作为默认登录用户'
},
auto_push: {
type: 'switch',
hidden: form => form.login_mode !== 'auto'
},
sftp_root: {
rules: [
{ required: true }
],
helpText: 'SFTP的起始路径tmp目录, 用户home目录或者自定义'
},
sudo: {
rules: [
{ required: true }
],
helpText: '使用逗号分隔多个命令,如: /bin/whoami,/sbin/ifconfig'
},
password: {
helpText: '密码或密钥密码',
hidden: form => form.auto_generate_key === true || form.login_mode !== 'auto'
},
shell: {
rules: [
{ required: true }
]
}
},
url: '/api/v1/assets/system-users/',
authHiden: false
}
},
computed: {
}
}
</script>
<style lang='less' scoped>
</style>

View File

@@ -53,6 +53,7 @@ export default {
align: 'center',
formatter: ActionsFormatter,
width: '200px',
updateRoute: 'SystemUserUpdate',
actions: {
performDelete: ({ row, col }) => {
const id = row.id

View File

@@ -1,134 +1,148 @@
export default {
path: '/assets',
redirect: '/assets/assets/',
name: 'assets',
meta: { title: 'Assets', icon: 'inbox' },
children: [
{
path: 'assets',
name: 'AssetList',
component: () => import('@/views/assets/AssetList.vue'),
meta: { title: 'AssetList' }
},
{
path: 'domains',
name: 'DomainList',
component: () => import('@/views/assets/Domain/DomainList.vue'),
meta: { title: 'DomainList' }
},
{
path: 'domains/create',
name: 'DomainCreate',
component: () => import('@/views/assets/Domain/DomainCreateUpdate.vue'),
meta: { title: 'DomainList' },
hidden: true
},
{
path: 'domains/:id/gateway',
name: 'GatewayList',
hidden: true,
component: () => import('@/views/assets/GatewayList'),
meta: { title: 'GatewayList' }
},
{
path: 'admin-users',
name: 'AdminUserList',
component: () => import('@/views/assets/AdminUser/AdminUserList'),
meta: { title: 'AdminUserList' }
},
{
path: 'admin-users/create',
component: () => import('@/views/assets/AdminUser/AdminUserCreateUpdate.vue'), // Parent router-view
name: 'AdminUserCreateUpdate',
meta: { title: 'AdminUserCreate' },
hidden: true
},
{
path: 'platform/update/:id',
component: () => import('@/views/assets/Platform/PlatformCreateUpdate.vue'), // Parent router-view
name: 'PlatformUpdate',
meta: { title: 'PlatformUpdate' },
hidden: true
},
{
path: 'platform/detail/:id',
component: () => import('@/views/assets/Platform/PlatformDetail.vue'), // Parent router-view
name: 'PlatformDetail',
meta: { title: 'PlatformDetail' },
hidden: true
},
{
path: 'platform/create',
component: () => import('@/views/assets/Platform/PlatformCreateUpdate.vue'), // Parent router-view
name: 'PlatformCreate',
meta: { title: 'PlatformCreate' },
hidden: true
},
{
path: 'cmd-filters/update/:id',
component: () => import('@/views/assets/CommandFilter/CommandFilterCreateUpdate.vue'), // Parent router-view
name: 'CommandFilterUpdate',
meta: { title: 'CommandFilterUpdate' },
hidden: true
},
{
path: 'cmd-filters/create',
component: () => import('@/views/assets/CommandFilter/CommandFilterCreateUpdate.vue'), // Parent router-view
name: 'CommandFilterCreate',
meta: { title: 'CommandFilterCreate' },
hidden: true
},
{
path: 'cmd-filters/:id',
component: () => import('@/views/assets/CommandFilter/CommandFilterDetail.vue'), // Parent router-view
name: 'CommandFilterDetail',
meta: { title: 'CommandFilterDetail' },
hidden: true
},
{
path: 'admin-users/:id',
component: () => import('@/views/assets/AdminUser/AdminUserDetail.vue'), // Parent router-view
name: 'AdminUserDetail',
meta: { title: 'AdminUserDetail' },
hidden: true
},
{
path: 'system-users',
name: 'SystemUserList',
component: () => import('@/views/assets/SystemUserList.vue'),
meta: { title: 'SystemUserList' }
},
{
path: 'labels/create',
name: 'LabelCreate',
component: () => import('@/views/assets/Label/LabelCreateUpdate.vue'),
meta: { title: 'LabelCreate' },
hidden: true
},
{
path: 'labels/update/:id',
name: 'LabelUpdate',
component: () => import('@/views/assets/Label/LabelCreateUpdate.vue'),
meta: { title: 'LabelUpdate' }, hidden: true
},
{
path: 'labels',
name: 'LabelList',
component: () => import('@/views/assets/Label/LabelList.vue'),
meta: { title: 'LabelList' }
},
{
path: 'cmd-filters',
name: 'CommandFilterList',
component: () => import('@/views/assets/CommandFilter/CommandFilterList.vue'),
meta: { title: 'CommandFilterList' }
},
{
path: 'platforms',
name: 'PlatformList',
component: () => import('@/views/assets/Platform/PlatformList'),
meta: { title: 'PlatformList' }
}
]
}
export default [
{
path: 'assets',
name: 'AssetList',
component: () => import('@/views/assets/AssetList.vue'),
meta: { title: 'AssetList' }
},
{
path: 'domains',
name: 'DomainList',
component: () => import('@/views/assets/Domain/DomainList.vue'),
meta: { title: 'DomainList' }
},
{
path: 'domains/create',
name: 'DomainCreate',
component: () => import('@/views/assets/Domain/DomainCreateUpdate.vue'),
meta: { title: 'DomainList' },
hidden: true
},
{
path: 'domains/:id/gateway',
name: 'GatewayList',
hidden: true,
component: () => import('@/views/assets/GatewayList'),
meta: { title: 'GatewayList' }
},
{
path: 'admin-users',
name: 'AdminUserList',
component: () => import('@/views/assets/AdminUser/AdminUserList'),
meta: { title: 'AdminUserList' }
},
{
path: 'admin-users/create',
component: () => import('@/views/assets/AdminUser/AdminUserCreateUpdate.vue'), // Parent router-view
name: 'AdminUserCreate',
meta: { title: 'AdminUserCreate' },
hidden: true
},
{
path: 'admin-users/update/:id',
component: () => import('@/views/assets/AdminUser/AdminUserCreateUpdate.vue'), // Parent router-view
name: 'AdminUserUpdate',
meta: { title: 'AdminUserUpdate' },
hidden: true
},
{
path: 'platform/update/:id',
component: () => import('@/views/assets/Platform/PlatformCreateUpdate.vue'), // Parent router-view
name: 'PlatformUpdate',
meta: { title: 'PlatformUpdate' },
hidden: true
},
{
path: 'platform/detail/:id',
component: () => import('@/views/assets/Platform/PlatformDetail.vue'), // Parent router-view
name: 'PlatformDetail',
meta: { title: 'PlatformDetail' },
hidden: true
},
{
path: 'platform/create',
component: () => import('@/views/assets/Platform/PlatformCreateUpdate.vue'), // Parent router-view
name: 'PlatformCreate',
meta: { title: 'PlatformCreate' },
hidden: true
},
{
path: 'cmd-filters/update/:id',
component: () => import('@/views/assets/CommandFilter/CommandFilterCreateUpdate.vue'), // Parent router-view
name: 'CommandFilterUpdate',
meta: { title: 'CommandFilterUpdate' },
hidden: true
},
{
path: 'cmd-filters/create',
component: () => import('@/views/assets/CommandFilter/CommandFilterCreateUpdate.vue'), // Parent router-view
name: 'CommandFilterCreate',
meta: { title: 'CommandFilterCreate' },
hidden: true
},
{
path: 'cmd-filters/:id',
component: () => import('@/views/assets/CommandFilter/CommandFilterDetail.vue'), // Parent router-view
name: 'CommandFilterDetail',
meta: { title: 'CommandFilterDetail' },
hidden: true
},
{
path: 'admin-users/:id',
component: () => import('@/views/assets/AdminUser/AdminUserDetail.vue'), // Parent router-view
name: 'AdminUserDetail',
meta: { title: 'AdminUserDetail' },
hidden: true
},
{
path: 'system-users/create',
name: 'SystemUserCreate',
component: () => import('@/views/assets/SystemUser/SystemUserCreateUpdate.vue'),
meta: { title: 'SystemUserCreate' },
hidden: true
},
{
path: 'system-users/update/:id',
name: 'SystemUserUpdate',
component: () => import('@/views/assets/SystemUser/SystemUserCreateUpdate.vue'),
meta: { title: 'SystemUserUpdate' },
hidden: true
},
{
path: 'system-users',
name: 'SystemUserList',
component: () => import('@/views/assets/SystemUser/SystemUserList.vue'),
meta: { title: 'SystemUserList' }
},
{
path: 'labels/create',
name: 'LabelCreate',
component: () => import('@/views/assets/Label/LabelCreateUpdate.vue'),
meta: { title: 'LabelCreate' },
hidden: true
},
{
path: 'labels/update/:id',
name: 'LabelUpdate',
component: () => import('@/views/assets/Label/LabelCreateUpdate.vue'),
meta: { title: 'LabelUpdate' }, hidden: true
},
{
path: 'labels',
name: 'LabelList',
component: () => import('@/views/assets/Label/LabelList.vue'),
meta: { title: 'LabelList' }
},
{
path: 'cmd-filters',
name: 'CommandFilterList',
component: () => import('@/views/assets/CommandFilter/CommandFilterList.vue'),
meta: { title: 'CommandFilterList' }
},
{
path: 'platforms',
name: 'PlatformList',
component: () => import('@/views/assets/Platform/PlatformList'),
meta: { title: 'PlatformList' }
}
]