mirror of
https://github.com/SecurityBrewery/catalyst.git
synced 2025-12-12 18:22:49 +01:00
Improve Job UI (#28)
This commit is contained in:
@@ -1,15 +1,52 @@
|
|||||||
<template>
|
<template>
|
||||||
<v-main style="min-height: 100vh;">
|
<v-main style="min-height: 100vh;">
|
||||||
<List
|
<v-row class="fill-height ma-0">
|
||||||
:items="jobs"
|
<v-col cols="3" class="listnav" style="">
|
||||||
routername="Job"
|
<v-list nav color="background">
|
||||||
itemid="id"
|
<v-list-item
|
||||||
itemname="id"
|
v-if="canWrite"
|
||||||
singular="Job"
|
:to="{ name: 'Job', params: { id: 'new' } }"
|
||||||
plural="Jobs"
|
class="mt-4 mx-4 text-center newbutton"
|
||||||
writepermission="admin:job:write"
|
>
|
||||||
:deletable="false"
|
<v-list-item-content>
|
||||||
></List>
|
<v-list-item-title>
|
||||||
|
<v-icon small>mdi-plus</v-icon> New Job
|
||||||
|
</v-list-item-title>
|
||||||
|
</v-list-item-content>
|
||||||
|
</v-list-item>
|
||||||
|
<v-subheader class="pl-4">Jobs</v-subheader>
|
||||||
|
<v-list-item
|
||||||
|
v-for="item in (jobs ? jobs : [])"
|
||||||
|
:key="item.id"
|
||||||
|
link
|
||||||
|
:to="{ name: 'Job', params: { id: item.id } }"
|
||||||
|
class="mx-2"
|
||||||
|
>
|
||||||
|
<v-list-item-icon>
|
||||||
|
<v-icon v-if="item.status === 'created'">mdi-star</v-icon>
|
||||||
|
<v-icon v-else-if="item.status === 'running'">mdi-run-fast</v-icon>
|
||||||
|
<v-icon v-else-if="item.status === 'paused'">mdi-pause</v-icon>
|
||||||
|
<v-icon v-else-if="item.status === 'restarting'">mdi-restart</v-icon>
|
||||||
|
<v-icon v-else-if="item.status === 'removing'">mdi-close</v-icon>
|
||||||
|
<v-icon v-else-if="item.status === 'exited'">mdi-exit-to-app</v-icon>
|
||||||
|
<v-icon v-else-if="item.status === 'dead'">mdi-skull</v-icon>
|
||||||
|
<v-icon v-else-if="item.status === 'completed'">mdi-check</v-icon>
|
||||||
|
</v-list-item-icon>
|
||||||
|
<v-list-item-content>
|
||||||
|
<v-list-item-subtitle>
|
||||||
|
{{ item.id }}
|
||||||
|
</v-list-item-subtitle>
|
||||||
|
<v-list-item-title>
|
||||||
|
{{ item.automation }} ({{ item.status }})
|
||||||
|
</v-list-item-title>
|
||||||
|
</v-list-item-content>
|
||||||
|
</v-list-item>
|
||||||
|
</v-list>
|
||||||
|
</v-col>
|
||||||
|
<v-col cols="9">
|
||||||
|
<router-view></router-view>
|
||||||
|
</v-col>
|
||||||
|
</v-row>
|
||||||
</v-main>
|
</v-main>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -18,7 +55,6 @@ import Vue from "vue";
|
|||||||
|
|
||||||
import {JobResponse} from "@/client";
|
import {JobResponse} from "@/client";
|
||||||
import {API} from "@/services/api";
|
import {API} from "@/services/api";
|
||||||
import List from "../components/List.vue";
|
|
||||||
|
|
||||||
interface State {
|
interface State {
|
||||||
jobs: Array<JobResponse>;
|
jobs: Array<JobResponse>;
|
||||||
@@ -26,10 +62,15 @@ interface State {
|
|||||||
|
|
||||||
export default Vue.extend({
|
export default Vue.extend({
|
||||||
name: "JobList",
|
name: "JobList",
|
||||||
components: {List},
|
components: {},
|
||||||
data: (): State => ({
|
data: (): State => ({
|
||||||
jobs: [],
|
jobs: [],
|
||||||
}),
|
}),
|
||||||
|
computed: {
|
||||||
|
canWrite: function (): boolean {
|
||||||
|
return this.hasRole("admin:job:write");
|
||||||
|
},
|
||||||
|
},
|
||||||
methods: {
|
methods: {
|
||||||
loadJobs() {
|
loadJobs() {
|
||||||
API.listJobs().then((response) => {
|
API.listJobs().then((response) => {
|
||||||
@@ -38,6 +79,12 @@ export default Vue.extend({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
hasRole: function (s: string): boolean {
|
||||||
|
if (this.$store.state.user.roles) {
|
||||||
|
return this.lodash.includes(this.$store.state.user.roles, s);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
this.loadJobs();
|
this.loadJobs();
|
||||||
|
|||||||
Reference in New Issue
Block a user