Merge "Add data table in OTAGUI." am: dae4cdad62 am: f09df797ba
Original change: https://android-review.googlesource.com/c/platform/development/+/1764566 Change-Id: I9c5b547302ad04bd958a5ac310260d2c91bab373
This commit is contained in:
114
tools/otagui/src/components/OTAJobTable.vue
Normal file
114
tools/otagui/src/components/OTAJobTable.vue
Normal file
@@ -0,0 +1,114 @@
|
|||||||
|
<template>
|
||||||
|
<TableLite
|
||||||
|
:columns="columns"
|
||||||
|
:is-re-search="isReSearch"
|
||||||
|
:is-loading="isLoading"
|
||||||
|
:rows="rows"
|
||||||
|
:sortable="sortable"
|
||||||
|
:total="total"
|
||||||
|
@do-search="doSearch"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import TableLite from 'vue3-table-lite'
|
||||||
|
import FormDate from '../services/FormDate.js'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
components: {
|
||||||
|
TableLite
|
||||||
|
},
|
||||||
|
props: {
|
||||||
|
jobs: {
|
||||||
|
type: Array,
|
||||||
|
required: true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data () {
|
||||||
|
return {
|
||||||
|
rows: null,
|
||||||
|
columns: [
|
||||||
|
{
|
||||||
|
label: "Source build",
|
||||||
|
field: "incremental_name",
|
||||||
|
sortable: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Target build",
|
||||||
|
field: "target_name",
|
||||||
|
sortable: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Status",
|
||||||
|
field: "status",
|
||||||
|
sortable: true,
|
||||||
|
display: function (row) {
|
||||||
|
return (
|
||||||
|
"<a href=/check/" + row.id + '>'
|
||||||
|
+ row.status
|
||||||
|
+ "</a>"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Partial",
|
||||||
|
field: "isPartial",
|
||||||
|
sortable: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Start Time",
|
||||||
|
field: "start_time",
|
||||||
|
sortable: true,
|
||||||
|
display: function (row) {
|
||||||
|
return FormDate.formDate(row.start_time)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Finish Time",
|
||||||
|
field: "finish_time",
|
||||||
|
sortable: true,
|
||||||
|
display: function (row) {
|
||||||
|
return FormDate.formDate(row.finish_time)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
sortable: {
|
||||||
|
order: "start_time",
|
||||||
|
sort: "desc",
|
||||||
|
},
|
||||||
|
isReSearch: false,
|
||||||
|
isLoading: false,
|
||||||
|
total: 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.rows = this.jobs
|
||||||
|
this.total = this.jobs.length
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
sort(arr, key, sortOrder, offset, limit) {
|
||||||
|
let orderNumber = 1
|
||||||
|
if (sortOrder==="asc") {
|
||||||
|
orderNumber = -1
|
||||||
|
}
|
||||||
|
return arr.sort(function(a, b) {
|
||||||
|
var keyA = a[key],
|
||||||
|
keyB = b[key];
|
||||||
|
if (keyA < keyB) return -1*orderNumber;
|
||||||
|
if (keyA > keyB) return 1*orderNumber;
|
||||||
|
return 0;
|
||||||
|
}).slice(offset, limit);
|
||||||
|
},
|
||||||
|
doSearch(offset, limit, order, sort) {
|
||||||
|
this.isLoading = true
|
||||||
|
setTimeout(() => {
|
||||||
|
this.sortable.order = order
|
||||||
|
this.sortable.sort = sort
|
||||||
|
this.rows = this.sort(this.jobs, order, sort, offset, limit)
|
||||||
|
this.total = this.jobs.length
|
||||||
|
}, 600)
|
||||||
|
setTimeout(() => {this.isLoading=false}, 1000)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
@@ -1,30 +1,42 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="jobs">
|
<OTAJobTable
|
||||||
<JobDisplay
|
v-if="jobs"
|
||||||
|
:jobs="jobs"
|
||||||
|
/>
|
||||||
|
<v-row>
|
||||||
|
<v-cow
|
||||||
v-for="job in jobs"
|
v-for="job in jobs"
|
||||||
:key="job.id"
|
:key="job.id"
|
||||||
:job="job"
|
cols="3"
|
||||||
:active="overStatus.get(job.id)"
|
sm="12"
|
||||||
@mouseover="mouseOver(job.id, true)"
|
class="ma-5"
|
||||||
@mouseout="mouseOver(job.id, false)"
|
|
||||||
/>
|
|
||||||
<v-btn
|
|
||||||
block
|
|
||||||
@click="updateStatus"
|
|
||||||
>
|
>
|
||||||
Update
|
<JobDisplay
|
||||||
</v-btn>
|
:job="job"
|
||||||
</div>
|
:active="overStatus.get(job.id)"
|
||||||
|
@mouseover="mouseOver(job.id, true)"
|
||||||
|
@mouseout="mouseOver(job.id, false)"
|
||||||
|
/>
|
||||||
|
</v-cow>
|
||||||
|
</v-row>
|
||||||
|
<v-btn
|
||||||
|
block
|
||||||
|
@click="updateStatus"
|
||||||
|
>
|
||||||
|
Update
|
||||||
|
</v-btn>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import JobDisplay from '@/components/JobDisplay.vue'
|
import JobDisplay from '@/components/JobDisplay.vue'
|
||||||
import ApiService from '../services/ApiService.js'
|
import ApiService from '../services/ApiService.js'
|
||||||
|
import OTAJobTable from '@/components/OTAJobTable.vue'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'JobList',
|
name: 'JobList',
|
||||||
components: {
|
components: {
|
||||||
JobDisplay,
|
JobDisplay,
|
||||||
|
OTAJobTable
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
@@ -50,13 +62,4 @@ export default {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped>
|
|
||||||
.jobs {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
align-items: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
Reference in New Issue
Block a user