Improve Job UI (#28)

This commit is contained in:
Jonas Plum
2022-01-20 10:59:57 +01:00
committed by GitHub
parent 6fbc6f9837
commit ad02113d99

View File

@@ -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();