Browse Source

WIP: Add tags display in monitorList & Details

remotes/philippdormann/main
Nelson Chan 4 years ago
parent
commit
dd4afb0f23
  1. 13
      src/components/MonitorList.vue
  2. 19
      src/components/Tag.vue
  3. 13
      src/pages/Details.vue

13
src/components/MonitorList.vue

@ -11,6 +11,9 @@
<Uptime :monitor="item" type="24" :pill="true" /> <Uptime :monitor="item" type="24" :pill="true" />
{{ item.name }} {{ item.name }}
</div> </div>
<div class="tags">
<Tag v-for="tag in item.tags" :key="tag" :item="tag" :size="'sm'" />
</div>
</div> </div>
<div v-show="$root.userHeartbeatBar == 'normal'" :key="$root.userHeartbeatBar" class="col-6 col-md-4"> <div v-show="$root.userHeartbeatBar == 'normal'" :key="$root.userHeartbeatBar" class="col-6 col-md-4">
<HeartbeatBar size="small" :monitor-id="item.id" /> <HeartbeatBar size="small" :monitor-id="item.id" />
@ -29,10 +32,13 @@
<script> <script>
import HeartbeatBar from "../components/HeartbeatBar.vue"; import HeartbeatBar from "../components/HeartbeatBar.vue";
import Uptime from "../components/Uptime.vue"; import Uptime from "../components/Uptime.vue";
import Tag from "../components/Tag.vue";
export default { export default {
components: { components: {
Uptime, Uptime,
HeartbeatBar, HeartbeatBar,
Tag,
}, },
props: { props: {
scrollbar: { scrollbar: {
@ -140,4 +146,11 @@ export default {
.monitorItem { .monitorItem {
width: 100%; width: 100%;
} }
.tags {
padding-left: 62px;
display: flex;
flex-direction: row;
flex-wrap: wrap;
}
</style> </style>

19
src/components/Tag.vue

@ -1,7 +1,16 @@
<template> <template>
<div class="tag-wrapper m-2 py-1 px-3 rounded d-inline-flex" :style="{ backgroundColor: item.color }"> <div class="tag-wrapper rounded d-inline-flex"
:class="{ 'px-3': size == 'normal',
'py-1': size == 'normal',
'm-2': size == 'normal',
'px-2': size == 'sm',
'py-0': size == 'sm',
'm-1': size == 'sm',
}"
:style="{ backgroundColor: item.color, fontSize: size == 'sm' ? '0.7em' : '1em' }"
>
{{ displayText }} {{ displayText }}
<span class="ps-1 btn-remove" @click="remove(item)"> <span v-if="remove != null" class="ps-1 btn-remove" @click="remove(item)">
<font-awesome-icon icon="times" /> <font-awesome-icon icon="times" />
</span> </span>
</div> </div>
@ -16,7 +25,11 @@ export default {
}, },
remove: { remove: {
type: Function, type: Function,
required: true, default: null,
},
size: {
type: String,
default: "normal",
} }
}, },
computed: { computed: {

13
src/pages/Details.vue

@ -2,6 +2,9 @@
<transition name="slide-fade" appear> <transition name="slide-fade" appear>
<div v-if="monitor"> <div v-if="monitor">
<h1> {{ monitor.name }}</h1> <h1> {{ monitor.name }}</h1>
<div class="tags">
<Tag v-for="tag in monitor.tags" :key="tag.id" :item="tag" :size="'sm'" />
</div>
<p class="url"> <p class="url">
<a v-if="monitor.type === 'http' || monitor.type === 'keyword' " :href="monitor.url" target="_blank">{{ monitor.url }}</a> <a v-if="monitor.type === 'http' || monitor.type === 'keyword' " :href="monitor.url" target="_blank">{{ monitor.url }}</a>
<span v-if="monitor.type === 'port'">TCP Ping {{ monitor.hostname }}:{{ monitor.port }}</span> <span v-if="monitor.type === 'port'">TCP Ping {{ monitor.hostname }}:{{ monitor.port }}</span>
@ -188,6 +191,7 @@ import CountUp from "../components/CountUp.vue";
import Uptime from "../components/Uptime.vue"; import Uptime from "../components/Uptime.vue";
import Pagination from "v-pagination-3"; import Pagination from "v-pagination-3";
const PingChart = defineAsyncComponent(() => import("../components/PingChart.vue")); const PingChart = defineAsyncComponent(() => import("../components/PingChart.vue"));
import Tag from "../components/Tag.vue";
export default { export default {
components: { components: {
@ -199,6 +203,7 @@ export default {
Status, Status,
Pagination, Pagination,
PingChart, PingChart,
Tag,
}, },
data() { data() {
return { return {
@ -423,4 +428,12 @@ table {
} }
} }
.tags {
margin-bottom: 0.5rem;
}
.tags > div:first-child {
margin-left: 0 !important;
}
</style> </style>

Loading…
Cancel
Save