<template> <div class='container'> <table class='table is-striped'> <thead> <tr> <td>Type</td> <td>Value</td> <td>Reason</td> <td>Active</td> </tr> </thead> <tbody> <tr v-for='(index, punishment) in punishments' track-by='$index'> <td>{{ punishment.type }}</td> <td>{{ punishment.value }}</td> <td>{{ punishment.reason }}</td> <td>{{ (punishment.active && new Date(punishment.expiresAt).getTime() > Date.now()) ? 'Active' : 'Inactive' }}</td> <td> <button class='button is-primary' @click='view(punishment)'>View</button> </td> </tr> </tbody> </table> <div class='card is-fullwidth'> <header class='card-header'> <p class='card-header-title'>Ban an IP</p> </header> <div class='card-content'> <div class='content'> <label class='label'>IP</label> <p class='control is-expanded'> <input class='input' type='text' placeholder='IP address (xxx.xxx.xxx.xxx)' v-model='ipBan.ip'> </p> <label class='label'>Reason</label> <p class='control is-expanded'> <input class='input' type='text' placeholder='Reason' v-model='ipBan.reason'> </p> </div> </div> <footer class='card-footer'> <a class='card-footer-item' @click='banIP()' href='#'>Ban IP</a> </footer> </div> </div> <view-punishment v-show='modals.viewPunishment'></view-punishment> </template> <script> import ViewPunishment from '../Modals/ViewPunishment.vue'; import { Toast } from 'vue-roaster'; import io from '../../io'; export default { components: { ViewPunishment }, data() { return { punishments: [], modals: { viewPunishment: false }, ipBan: {} } }, methods: { toggleModal: function () { this.modals.viewPunishment = !this.modals.viewPunishment; }, view: function (punishment) { this.$broadcast('viewPunishment', punishment); }, banIP: function() { let _this = this; _this.socket.emit('punishments.banIP', res => { Toast.methods.addToast(res.message, 6000); }); }, init: function () { let _this = this; _this.socket.emit('punishments.index', result => { if (result.status === 'success') _this.punishments = result.data; }); //_this.socket.emit('apis.joinAdminRoom', 'punishments', () => {}); } }, ready: function () { let _this = this; io.getSocket(socket => { _this.socket = socket; if (_this.socket.connected) _this.init(); io.onConnect(() => _this.init()); }); } } </script> <style lang='scss' scoped> body { font-family: 'Roboto', sans-serif; } </style>