merge pr@dev@refactor_tickets

This commit is contained in:
feng626
2022-06-02 11:39:59 +08:00
7 changed files with 77 additions and 41 deletions

View File

@@ -27,7 +27,7 @@ export default {
createRoute: {
type: [String, Object, Function],
default: function() {
return this.$route.name.replace('List', 'Create')
return this.$route.name?.replace('List', 'Create')
}
},
createInNewPage: {

View File

@@ -690,6 +690,8 @@
"AssetAccount": "资产账号",
"ApplicationAccount": "应用账号",
"Ticket":"工单",
"MyTickets": "我的申请",
"AssignedTicketList": "待我审批",
"SessionDetail": "会话详情",
"CommandConfirm": "命令复核",
"AdminUserCreate": "创建管理用户",
@@ -1132,8 +1134,8 @@
"Assignee": "处理人",
"Assignees": "待处理人",
"Close": "关闭",
"OpenStatus":"开启",
"CloseStatus":"关闭",
"OpenStatus":"审批中",
"CloseStatus":"已完成",
"Comment": "备注",
"MyTickets": "我发起的",
"RequestPerm":"授权申请",

View File

@@ -89,7 +89,7 @@ export default {
createSuccessNextRoute: {
type: Object,
default: function() {
const routeName = this.$route.name.replace('Create', 'List')
const routeName = this.$route.name?.replace('Create', 'List')
return { name: routeName }
}
},
@@ -97,15 +97,14 @@ export default {
updateSuccessNextRoute: {
type: Object,
default: function() {
const routeName = this.$route.name.replace('Update', 'List')
const routeName = this.$route.name?.replace('Update', 'List')
return { name: routeName }
}
},
objectDetailRoute: {
type: Object,
default: function() {
const routeName = this.$route.name
.replace('Update', 'Detail')
const routeName = this.$route.name?.replace('Update', 'Detail')
.replace('Create', 'Detail')
return { name: routeName }
}

View File

@@ -4,7 +4,7 @@ import i18n from '@/i18n/i18n'
export default {
path: '/tickets',
redirect: '/tickets/tickets',
redirect: '/tickets/my-tickets',
component: Layout,
meta: {
title: i18n.t('route.Tickets'),
@@ -17,26 +17,40 @@ export default {
permissions: ['tickets.view_ticket']
},
children: [
{
path: '/tickets/my-tickets',
name: 'MyTicketList',
component: () => import('@/views/tickets/MyTicketList'),
meta: {
title: i18n.t('route.MyTickets'),
icon: 'file-text-o',
showOrganization: false,
permissions: []
}
},
{
path: '/tickets/assigned-tickets',
name: 'AssignedTicketList',
component: () => import('@/views/tickets/AssignedTicketList'),
meta: {
title: i18n.t('route.AssignedTicketList'),
icon: 'check-square-o',
showOrganization: false,
permissions: []
}
},
{
path: '/tickets/tickets',
redirect: '',
component: empty,
hidden: true,
meta: {
title: i18n.t('route.Tickets'),
icon: 'file-text-o',
showOrganization: false
},
children: [
{
path: '',
name: 'TicketList',
component: () => import('@/views/tickets'),
meta: {
title: i18n.t('route.Tickets'),
icon: 'file-text-o',
permissions: ['tickets.view_ticket']
}
},
{
path: 'request-asset-perm/create',
name: 'RequestAssetPermTicketCreateUpdate',

View File

@@ -1,14 +1,14 @@
<template>
<TicketListTable :url="url" />
<BaseTicketList :url="url" />
</template>
<script>
import TicketListTable from './TicketListTable'
import BaseTicketList from './BaseTicketList'
import { mapGetters } from 'vuex'
export default {
name: 'AssignedTicketList',
components: {
TicketListTable
BaseTicketList
},
computed: {
url() {

View File

@@ -1,15 +1,20 @@
<template>
<ListTable :table-config="ticketTableConfig" :header-actions="ticketActions" />
<GenericListPage
v-loading="loading"
:table-config="ticketTableConfig"
:header-actions="ticketActions"
/>
</template>
<script type="text/jsx">
import ListTable from '@/components/ListTable'
import { GenericListPage } from '@/layout/components'
import { DetailFormatter } from '@/components/TableFormatters'
import { toSafeLocalDateStr } from '@/utils/common'
import { APPROVE, REJECT, CLOSED } from './const'
import { APPROVE, REJECT } from './const'
export default {
name: 'TicketListTable',
components: {
ListTable
GenericListPage
},
props: {
url: {
@@ -23,6 +28,7 @@ export default {
},
data() {
return {
loading: true,
ticketTableConfig: {
url: this.url,
columns: [
@@ -70,9 +76,9 @@ export default {
sortable: 'custom',
formatter: row => {
if (row.status === 'open') {
return <el-tag type='primary' size='mini'style='align-items:center; display: flex; justify-content:center;'> { this.$t('tickets.OpenStatus') }</el-tag>
return <el-tag type='primary' size='mini'> { this.$t('tickets.OpenStatus') }</el-tag>
} else {
return <el-tag type='danger' size='mini'style='align-items:center; display: flex; justify-content:center;'> { this.$t('tickets.CloseStatus') }</el-tag>
return <el-tag type='danger' size='mini'> { this.$t('tickets.CloseStatus') }</el-tag>
}
}
},
@@ -84,15 +90,26 @@ export default {
sortable: 'custom',
formatter: row => {
if (row.status === 'open') {
return <el-tag type='success' size='mini'style='align-items:center; display: flex; justify-content:center;'> { this.$t('tickets.Pending') }</el-tag>
return <el-tag
type='success'
size='mini'
>
{ this.$t('tickets.Pending') }
</el-tag>
}
switch (row.state) {
case 'approved':
return <el-tag type='primary' size='mini' style='align-items:center; display: flex; justify-content:center;'> { this.$t('tickets.Approved') }</el-tag>
return <el-tag type='primary' size='mini'>
{ this.$t('tickets.Approved') }
</el-tag>
case 'rejected':
return <el-tag type='danger' size='mini' style='align-items:center; display: flex; justify-content:center;'> { this.$t('tickets.Rejected') }</el-tag>
return <el-tag type='danger' size='mini'>
{ this.$t('tickets.Rejected') }
</el-tag>
default :
return <el-tag type='info' size='mini' style='align-items:center; display: flex; justify-content:center;'> { this.$t('tickets.Closed') }</el-tag>
return <el-tag type='info' size='mini'>
{ this.$t('tickets.Closed') }
</el-tag>
}
}
},
@@ -138,10 +155,6 @@ export default {
{
value: REJECT,
label: this.$t('tickets.Rejected')
},
{
value: CLOSED,
label: this.$t('tickets.Closed')
}
]
}
@@ -154,18 +167,27 @@ export default {
{
name: 'RequestAssetPerm',
title: this.$t('tickets.RequestAssetPerm'),
callback: () => this.$router.push({ name: 'RequestAssetPermTicketCreateUpdate' })
callback: () => this.$router.push({
name: 'RequestAssetPermTicketCreateUpdate'
})
},
{
name: 'RequestApplicationPerm',
title: this.$t('tickets.RequestApplicationPerm'),
callback: () => this.$router.push({ name: 'RequestApplicationPermTicketCreateUpdate' })
callback: () => this.$router.push({
name: 'RequestApplicationPermTicketCreateUpdate'
})
}
]
}
}
}
},
mounted() {
setTimeout(() => {
this.loading = false
}, 500)
},
methods: {
}
}

View File

@@ -1,18 +1,17 @@
<template>
<TicketListTable :url="url" :has-more-actions="true" />
<BaseTicketList :url="url" :has-more-actions="true" />
</template>
<script>
import TicketListTable from './TicketListTable'
import BaseTicketList from './BaseTicketList'
import { mapGetters } from 'vuex'
export default {
name: 'MyTicketList',
components: {
TicketListTable
BaseTicketList
},
data() {
return {
}
},
computed: {