first commit

This commit is contained in:
Sthope 2022-02-27 20:56:42 +01:00
parent df01be1d85
commit f411f90765
12 changed files with 17 additions and 1035 deletions

View File

@ -1,4 +1,4 @@
FROM node:14
FROM node:14-alpine
WORKDIR /code

View File

@ -3,8 +3,11 @@ version: "3.8"
services:
iot_dashboard:
image: sthopeless/iot-finances:latest
restart: always
container_name: iot_dashboard
restart: unless-stopped
network_mode: bridge
volumes:
- ./:/code
ports:
- 8080:8080
labels:

View File

@ -1,7 +1,7 @@
<template>
<footer class="main-footer">
<strong>Copyright &copy; {{ year }}
<a href="https://discord.gg/Mh9mTEA">CPHA.pt</a>.</strong> All rights reserved.
<a href="https://www.sthope.dev">Sthope</a>.</strong> All rights reserved.
</footer>
</template>

View File

@ -38,8 +38,9 @@
</span>
</a>
<ul class="treeview-menu">
<router-link tag="li" class="pageLink" to="/settings_personal"><a href="#"><i class="fa fa-user"></i> User Configs</a><</router-link>
<router-link tag="li" class="pageLink" to="/configurations"><a href="#"><i class="fa fa-cog"></i> Configurations</a><</router-link>
<router-link tag="li" class="pageLink" to="/settings_google"><a href="#"><i class="fa fa-google"></i> Google</a><</router-link>
<router-link tag="li" class="pageLink" to="/settings_google"><a href="#"><i class="fa fa-google"></i> Google Settings</a><</router-link>
<router-link tag="li" class="pageLink" to="/iot"><a href="#"><i class="fa fa-connectdevelop"></i> MQTT / Home Assistant</a><</router-link>
<router-link tag="li" class="pageLink" to="/backup"><a href="#"><i class="fa fa-server"></i> Backup/Restore</a><</router-link>
</ul>

View File

@ -1,93 +0,0 @@
<template>
<section class="content">
<h1 class="text-center">Access</h1>
<h4 class="text-center">Where our users are coming from.</h4>
<div class="row">
<div class="col-md-12">
<!-- MAP & BOX PANE -->
<div class="box box-success">
<div class="box-header with-border">
<h3 class="box-title">Visitors Report</h3>
<div class="box-tools pull-right">
<button type="button" class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i>
</button>
<button type="button" class="btn btn-box-tool" data-widget="remove"><i class="fa fa-times"></i></button>
</div>
</div>
<!-- /.box-header -->
<div class="box-body no-padding">
<div class="row no-gutters">
<div class="col-md-8">
<!-- Map will be created here -->
<div id="world-map-markers"></div>
</div>
<!-- /.col -->
<div class="col-md-4">
<div class="pad box-pane-right bg-green" style="min-height: 400px">
<div v-for="stat in stats" class="description-block margin-bottom">
<div class="row" data-color="#fff"><i class="fa fa-bar-chart-o fa-3x"></i></div>
<h5 class="description-header">{{stat.header}}</h5>
<span class="description-text">{{stat.text}}</span>
</div>
</div>
</div>
<!-- /.col -->
</div>
<!-- /.row -->
</div>
<!-- /.box-body -->
</div>
<link rel="stylesheet" href="/static/js/plugins/jvectormap/jquery-jvectormap-2.0.3.css" >
</div>
</div>
</section>
</template>
<script>
import {stats} from '../../demo'
const pluginURL = '/static/js/plugins/jvectormap/jquery-jvectormap-2.0.3.min.js'
const mapURL = '/static/js/plugins/jvectormap/jquery-jvectormap-world-mill.js'
export default {
name: 'Access',
data () {
return {
stats
}
},
mounted () {
this.$nextTick(() => {
window.jQuery.getScript(pluginURL, () => {
window.jQuery.getScript(mapURL, () => {
window.jQuery('#world-map-markers').vectorMap({
map: 'world_mill'
})
})
})
})
}
}
</script>
<style>
.fake {
color: 'red';
}
#world-map-markers svg {
height: 355px;
}
.row.no-gutters {
margin-right: 0;
margin-left: 0;
}
.row.no-gutters > [class^="col-"],
.row.no-gutters > [class*=" col-"] {
padding-right: 0;
padding-left: 0;
}
</style>

View File

@ -1,354 +0,0 @@
<template>
<!-- Main content -->
<section class="content">
<!-- Info boxes -->
<div class="col-md-3 col-sm-6 col-xs-12">
<info-box color-class="bg-aqua"
:icon-classes="['ion', 'ion-ios-gear-outline']"
text="CPU Traffic"
number="90%"></info-box>
</div>
<!-- /.col -->
<div class="col-md-3 col-sm-6 col-xs-12">
<info-box color-class="bg-red"
:icon-classes="['fa', 'fa-google-plus']"
text="Likes"
number="41,410"></info-box>
</div>
<!-- /.col -->
<!-- fix for small devices only -->
<div class="clearfix visible-sm-block"></div>
<div class="col-md-3 col-sm-6 col-xs-12">
<info-box color-class="bg-green"
:icon-classes="['ion', 'ion-ios-cart-outline']"
text="Sales"
number="760"></info-box>
</div>
<!-- /.col -->
<div class="col-md-3 col-sm-6 col-xs-12">
<info-box color-class="bg-yellow"
:icon-classes="['ion', 'ion-ios-people-outline']"
text="New Members"
number="2,000"></info-box>
</div>
<!-- /.col -->
<div class="row center-block">
<h2>Data tables</h2>
<div class="col-md-12">
<div class="box">
<div class="box-header">
<h3 class="box-title">Data Table With Full Features</h3>
</div>
<!-- /.box-header -->
<div class="box-body">
<div class="dataTables_wrapper form-inline dt-bootstrap" id="example1_wrapper">
<div class="row">
<div class="col-sm-6">
<div id="example1_length" class="dataTables_length">
</div>
</div>
</div>
<div class="row">
<div class="col-sm-12 table-responsive">
<table aria-describedby="example1_info" role="grid" id="example1" class="table table-bordered table-striped dataTable">
<thead>
<tr role="row">
<th aria-label="Rendering engine: activate to sort column descending" aria-sort="ascending" style="width: 167px;" colspan="1" rowspan="1" aria-controls="example1" tabindex="0" class="sorting_asc">Rendering engine</th>
<th aria-label="Browser: activate to sort column ascending" style="width: 207px;" colspan="1" rowspan="1" aria-controls="example1" tabindex="0" class="sorting">Browser</th>
<th aria-label="Platform(s): activate to sort column ascending" style="width: 182px;" colspan="1" rowspan="1" aria-controls="example1" tabindex="0" class="sorting">Platform(s)</th>
<th aria-label="Engine version: activate to sort column ascending" style="width: 142px;" colspan="1" rowspan="1" aria-controls="example1" tabindex="0" class="sorting">Engine version</th>
<th aria-label="CSS grade: activate to sort column ascending" style="width: 101px;" colspan="1" rowspan="1" aria-controls="example1" tabindex="0" class="sorting">CSS grade</th>
</tr>
</thead>
<tbody>
<tr class="even" role="row">
<td class="sorting_1">Blink</td>
<td>Iridium 54.0</td>
<td>GNU/Linux</td>
<td>54</td>
<td>A</td>
</tr>
<tr class="odd" role="row">
<td class="sorting_1">Gecko</td>
<td>Firefox 1.0</td>
<td>Win 98+ / OSX.2+</td>
<td>1.7</td>
<td>A</td>
</tr>
<tr class="even" role="row">
<td class="sorting_1">Gecko</td>
<td>Firefox 1.5</td>
<td>Win 98+ / OSX.2+</td>
<td>1.8</td>
<td>A</td>
</tr>
<tr class="odd" role="row">
<td class="sorting_1">Gecko</td>
<td>Firefox 2.0</td>
<td>Win 98+ / OSX.2+</td>
<td>1.8</td>
<td>A</td>
</tr>
<tr class="even" role="row">
<td class="sorting_1">Gecko</td>
<td>Firefox 3.0</td>
<td>Win 2k+ / OSX.3+</td>
<td>1.9</td>
<td>A</td>
</tr>
<tr class="odd" role="row">
<td class="sorting_1">Gecko</td>
<td>Camino 1.0</td>
<td>OSX.2+</td>
<td>1.8</td>
<td>A</td>
</tr>
<tr class="even" role="row">
<td class="sorting_1">Gecko</td>
<td>Camino 1.5</td>
<td>OSX.3+</td>
<td>1.8</td>
<td>A</td>
</tr>
<tr class="odd" role="row">
<td class="sorting_1">Gecko</td>
<td>Netscape 7.2</td>
<td>Win 95+ / Mac OS 8.6-9.2</td>
<td>1.7</td>
<td>A</td>
</tr>
<tr class="even" role="row">
<td class="sorting_1">Gecko</td>
<td>Netscape Browser 8</td>
<td>Win 98SE+</td>
<td>1.7</td>
<td>A</td>
</tr>
<tr class="odd" role="row">
<td class="sorting_1">Gecko</td>
<td>Netscape Navigator 9</td>
<td>Win 98+ / OSX.2+</td>
<td>1.8</td>
<td>A</td>
</tr>
<tr class="even" role="row">
<td class="sorting_1">Gecko</td>
<td>Mozilla 1.0</td>
<td>Win 95+ / OSX.1+</td>
<td>1</td>
<td>A</td>
</tr>
</tbody>
<tfoot>
<tr>
<th colspan="1" rowspan="1">Rendering engine</th>
<th colspan="1" rowspan="1">Browser</th>
<th colspan="1" rowspan="1">Platform(s)</th>
<th colspan="1" rowspan="1">Engine version</th>
<th colspan="1" rowspan="1">CSS grade</th>
</tr>
</tfoot>
</table>
</div>
</div>
</div>
<!-- /.box-body -->
</div>
</div>
</div>
</div>
</div>
<!-- /.row -->
<div class="col-xs-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title"></h3>
<div class="box-body">
<div class="col-sm-6 col-xs-12">
<p class="text-center">
<strong>Web Traffic Overview</strong>
</p>
<canvas id="trafficBar" ></canvas>
</div>
<hr class="visible-xs-block">
<div class="col-sm-6 col-xs-12">
<p class="text-center">
<strong>Language Overview</strong>
</p>
<canvas id="languagePie"></canvas>
</div>
</div>
</div>
<!-- <div class="text-center">
<small><b>Pro Tip</b> Don't forget to star us on github!</small>
</div> -->
</div>
</div>
<!-- /.row -->
<!-- Main row -->
<div class="row">
<div class="col-md-3 col-sm-6 col-xs-12">
<process-info-box color-class="bg-yellow"
:icon-classes="['ion', 'ion-ios-pricetag-outline']"
text="Inventory"
number="5,200"
:progress="50"
description="50% increase since May"></process-info-box>
</div>
<!-- /.col -->
<div class="col-md-3 col-sm-6 col-xs-12">
<process-info-box color-class="bg-green"
:icon-classes="['ion', 'ion-ios-heart-outline']"
text="Mentions"
number="92,050"
:progress="20"
description="20% increase in 30 days"></process-info-box>
</div>
<!-- /.col -->
<div class="col-md-3 col-sm-6 col-xs-12">
<process-info-box color-class="bg-red"
:icon-classes="['ion', 'ion-ios-cloud-download-outline']"
text="Downloads"
number="114,381"
:progress="70"
description="70% increase since yesterday"></process-info-box>
</div>
<!-- /.col -->
<div class="col-md-3 col-sm-6 col-xs-12">
<process-info-box color-class="bg-aqua"
:icon-classes="['ion', 'ion-ios-chatbubble-outline']"
text="Direct Messages"
number="163,921"
:progress="40"
description="40% increase compared to last year"></process-info-box>
</div>
<!-- /.col -->
</div>
<!-- /.row -->
</section>
<!-- /.content -->
</template>
<script>
import Chart from 'chart.js'
import Alert from '../widgets/Alert'
import InfoBox from '../widgets/InfoBox'
import ProcessInfoBox from '../widgets/ProcessInfoBox'
export default {
name: 'Dashboard',
components: {
Alert,
InfoBox,
ProcessInfoBox
},
data () {
return {
generateRandomNumbers (numbers, max, min) {
var a = []
for (var i = 0; i < numbers; i++) {
a.push(Math.floor(Math.random() * (max - min + 1)) + max)
}
return a
}
}
},
computed: {
coPilotNumbers () {
return this.generateRandomNumbers(12, 1000000, 10000)
},
personalNumbers () {
return this.generateRandomNumbers(12, 1000000, 10000)
},
isMobile () {
return (window.innerWidth <= 800 && window.innerHeight <= 600)
}
},
mounted () {
this.$nextTick(() => {
var ctx = document.getElementById('trafficBar').getContext('2d')
var config = {
type: 'line',
data: {
labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
datasets: [{
label: 'CoPilot',
fill: false,
borderColor: '#284184',
pointBackgroundColor: '#284184',
backgroundColor: 'rgba(0, 0, 0, 0)',
data: this.coPilotNumbers
}, {
label: 'Personal Site',
borderColor: '#4BC0C0',
pointBackgroundColor: '#4BC0C0',
backgroundColor: 'rgba(0, 0, 0, 0)',
data: this.personalNumbers
}]
},
options: {
responsive: true,
maintainAspectRatio: !this.isMobile,
legend: {
position: 'bottom',
display: true
},
tooltips: {
mode: 'label',
xPadding: 10,
yPadding: 10,
bodySpacing: 10
}
}
}
new Chart(ctx, config) // eslint-disable-line no-new
var pieChartCanvas = document.getElementById('languagePie').getContext('2d')
var pieConfig = {
type: 'pie',
data: {
labels: ['HTML', 'JavaScript', 'CSS'],
datasets: [{
data: [56.6, 37.7, 4.1],
backgroundColor: ['#00a65a', '#f39c12', '#00c0ef'],
hoverBackgroundColor: ['#00a65a', '#f39c12', '#00c0ef']
}]
},
options: {
responsive: true,
maintainAspectRatio: !this.isMobile,
legend: {
position: 'bottom',
display: true
}
}
}
new Chart(pieChartCanvas, pieConfig) // eslint-disable-line no-new
})
}
}
</script>
<style>
.info-box {
cursor: pointer;
}
.info-box-content {
text-align: center;
vertical-align: middle;
display: inherit;
}
.fullCanvas {
width: 100%;
}
</style>

View File

@ -1,89 +0,0 @@
<template>
<div>
<h1 class="text-center">Repos</h1>
<h4 class="text-center">Github Repos</h4>
<section class="content">
<div class="row">
<div v-if="error">
Found an error
</div>
<div v-else>
<div class="col-md-4" v-if="response" v-for="repo in response" >
<div class="box box-widget widget-user">
<div class="widget-user-header bg-aqua-active text-center">
<h3 class="widget-user-username center-text">{{repo.name }}</h3>
</div>
<div class="widget-user-image">
<img class="img-circle" v-bind:src="repo.owner.avatar_url" alt="repo.owner.login + ' Avatar'">
</div>
<div class="box-footer">
<div class="row">
<div class="col-sm-4 border-right">
<div class="description-block">
<h5 class="description-header">{{repo.stargazers_count}}</h5>
<span class="description-text">Star</span>
</div>
</div>
<div class="col-sm-4 border-right">
<div class="description-block">
<a v-bind:href="repo.owner.html_url" target="_blank">
<button type="button" class="btn btn-default btn-lg">Visit</button>
</a>
</div>
</div>
<div class="col-sm-4">
<div class="description-block">
<h5 class="description-header">{{repo.forks_count}}</h5>
<span class="description-text">Forks</span>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
</div>
</template>
<script>
import axios from 'axios'
export default {
name: 'Repository',
data () {
return {
githubUrl: 'https://api.github.com/search/repositories?q=language%3Ajavascript&sort=stars',
response: null,
error: null
}
},
methods: {
callGitHub () {
axios.get(this.githubUrl)
.then(response => {
console.log('GitHub Response:', response)
if (response.status !== 200) {
this.error = response.statusText
return
}
this.response = response.data.items
})
.catch(error => {
// Request failed.
console.log('error', error.response)
this.error = error.response.statusText
})
}
},
mounted () {
this.callGitHub()
}
}
</script>
<style>
</style>

View File

@ -1,36 +0,0 @@
<template>
<div>
<h1 class="text-center">Our Environment</h1>
<section class="content">
<div class="row" v-if="servers">
<div class="col-md-4" v-for="server in servers">
<div v-bind:class="'box box-' + server.status">
<div class="box-header with-border">
<i v-bind:class="'fa fa-' + server.icon + ' fa-2x'"></i>
<h3 class="box-title">{{server.name}}</h3>
</div>
<div class="box-body">
<span>{{server.description}}</span>
</div>
</div>
</div>
</div>
</section>
</div>
</template>
<script>
import {servers} from '../../demo'
export default {
name: 'Servers',
data () {
return {
servers
}
}
}
</script>
<style>
</style>

View File

@ -1,125 +0,0 @@
<template>
<div>
<h1 class="text-center">Settings</h1>
<section class="content">
<div class="row">
<div class="col-md-12">
<div class="box box-info">
<!-- Input Addons -->
<div class="box-header with-border">
<h3 class="box-title">Inputs</h3>
</div>
<div class="box-body">
<!-- calendar group -->
<div class="input-group">
<span class="input-group-addon">
<i class="fa fa-fw fa-calendar"></i>
</span>
<datepicker :readonly="true" format="MMM/D/YYYY" id="dateInput" width="100%"></datepicker>
</div>
<br />
<br />
<!-- with characthers -->
<div class="input-group">
<span class="input-group-addon">
<i class="fa fa-fw fa-at" aria-hidden="true"></i>
</span>
<input class="form-control" placeholder="Username" type="text">
</div>
<br />
<div class="input-group">
<span class="input-group-addon">
<i class="fa fa-fw fa-usd" aria-hidden="true"></i>
</span>
<input class="form-control" type="text">
<span class="input-group-addon">.00</span>
</div>
<br />
<!-- with icons from font awesome -->
<h4>With icons</h4>
<div class="input-group">
<span class="input-group-addon"><i class="fa fa-fw fa-envelope"></i></span>
<input class="form-control" placeholder="Email" type="email">
</div>
<br />
<div class="input-group">
<input class="form-control" type="text">
<span class="input-group-addon"><i class="fa fa-fw fa-check"></i></span>
</div>
<br>
<!-- Success/Error heads up input -->
<h4>With border indicator</h4>
<div class="form-group has-success">
<label class="control-label" for="inputSuccess"><i class="fa fa-fw fa-check"></i> Input with success</label>
<input class="form-control" id="inputSuccess" placeholder="Enter ..." type="text">
<span class="help-block">Help block with success</span>
</div>
<br />
<div class="form-group has-error">
<label class="control-label" for="inputError"><i class="fa fa-fw fa-times-circle-o"></i> Input with error</label>
<input class="form-control" id="inputError" placeholder="Enter ..." type="text">
<span class="help-block">Help block with error</span>
</div>
<!-- select examples -->
<h4>Select Options</h4>
<div class="form-group">
<label>Select</label>
<select class="form-control">
<option>option 1</option>
<option>option 2</option>
<option>option 3</option>
<option>option 4</option>
<option>option 5</option>
</select>
</div>
<br />
<div class="form-group">
<label>Select Multiple</label>
<select multiple="" class="form-control">
<option>option 1</option>
<option>option 2</option>
<option>option 3</option>
<option>option 4</option>
<option>option 5</option>
</select>
</div>
<!-- /input-group -->
</div>
<!-- /.box-body -->
</div>
</div>
</div>
</section>
</div>
</template>
<script>
require('moment')
import datepicker from 'vue-date-picker'
export default {
name: 'Settings',
components: { datepicker },
computed: {
datetime () {
return new Date()
}
},
methods: {
clearInput (vueModel) {
vueModel = ''
}
}
}
</script>
<style>
.datetime-picker input {
height: 4em !important;
}
</style>

View File

@ -1,239 +0,0 @@
<template>
<section class="content">
<div class="row center-block">
<h2>Simple</h2>
<div class="col-md-12">
<div class="box">
<div class="box-header">
<h3 class="box-title">Striped Full Width Table</h3>
</div>
<!-- /.box-header -->
<div class="box-body no-padding table-responsive">
<table class="table table-striped">
<tbody>
<tr>
<th style="width: 10px">#</th>
<th>Task</th>
<th>Progress</th>
<th style="width: 40px">Label</th>
</tr>
<tr>
<td>1.</td>
<td>Update software</td>
<td><div class="progress progress-xs"><div class="progress-bar progress-bar-danger" style="width: 55%"></div></div></td>
<td><span class="badge bg-red">55%</span></td>
</tr>
<tr>
<td>2.</td>
<td>Clean database</td>
<td>
<div class="progress progress-xs">
<div class="progress-bar progress-bar-yellow" style="width: 70%"></div>
</div>
</td>
<td><span class="badge bg-yellow">70%</span></td>
</tr>
<tr>
<td>3.</td>
<td>Cron job running</td>
<td>
<div class="progress progress-xs progress-striped active">
<div class="progress-bar progress-bar-primary" style="width: 30%"></div>
</div>
</td>
<td><span class="badge bg-light-blue">30%</span></td>
</tr>
<tr>
<td>4.</td>
<td>Fix and squish bugs</td>
<td>
<div class="progress progress-xs progress-striped active">
<div class="progress-bar progress-bar-success" style="width: 90%"></div>
</div>
</td>
<td><span class="badge bg-green">90%</span></td>
</tr>
</tbody>
</table>
</div>
<!-- /.box-body -->
</div>
</div>
</div>
<div class="row center-block">
<h2>Data tables</h2>
<div class="col-md-12">
<div class="box">
<div class="box-header">
<h3 class="box-title">Data Table With Full Features</h3>
</div>
<!-- /.box-header -->
<div class="box-body">
<div class="dataTables_wrapper form-inline dt-bootstrap" id="example1_wrapper">
<div class="row">
<div class="col-sm-6">
<div id="example1_length" class="dataTables_length">
</div>
</div>
</div>
<div class="row">
<div class="col-sm-12 table-responsive">
<table aria-describedby="example1_info" role="grid" id="example1" class="table table-bordered table-striped dataTable">
<thead>
<tr role="row">
<th aria-label="Rendering engine: activate to sort column descending" aria-sort="ascending" style="width: 167px;" colspan="1" rowspan="1" aria-controls="example1" tabindex="0" class="sorting_asc">Rendering engine</th>
<th aria-label="Browser: activate to sort column ascending" style="width: 207px;" colspan="1" rowspan="1" aria-controls="example1" tabindex="0" class="sorting">Browser</th>
<th aria-label="Platform(s): activate to sort column ascending" style="width: 182px;" colspan="1" rowspan="1" aria-controls="example1" tabindex="0" class="sorting">Platform(s)</th>
<th aria-label="Engine version: activate to sort column ascending" style="width: 142px;" colspan="1" rowspan="1" aria-controls="example1" tabindex="0" class="sorting">Engine version</th>
<th aria-label="CSS grade: activate to sort column ascending" style="width: 101px;" colspan="1" rowspan="1" aria-controls="example1" tabindex="0" class="sorting">CSS grade</th>
</tr>
</thead>
<tbody>
<tr class="even" role="row">
<td class="sorting_1">Blink</td>
<td>Iridium 54.0</td>
<td>GNU/Linux</td>
<td>54</td>
<td>A</td>
</tr>
<tr class="odd" role="row">
<td class="sorting_1">Gecko</td>
<td>Firefox 1.0</td>
<td>Win 98+ / OSX.2+</td>
<td>1.7</td>
<td>A</td>
</tr>
<tr class="even" role="row">
<td class="sorting_1">Gecko</td>
<td>Firefox 1.5</td>
<td>Win 98+ / OSX.2+</td>
<td>1.8</td>
<td>A</td>
</tr>
<tr class="odd" role="row">
<td class="sorting_1">Gecko</td>
<td>Firefox 2.0</td>
<td>Win 98+ / OSX.2+</td>
<td>1.8</td>
<td>A</td>
</tr>
<tr class="even" role="row">
<td class="sorting_1">Gecko</td>
<td>Firefox 3.0</td>
<td>Win 2k+ / OSX.3+</td>
<td>1.9</td>
<td>A</td>
</tr>
<tr class="odd" role="row">
<td class="sorting_1">Gecko</td>
<td>Camino 1.0</td>
<td>OSX.2+</td>
<td>1.8</td>
<td>A</td>
</tr>
<tr class="even" role="row">
<td class="sorting_1">Gecko</td>
<td>Camino 1.5</td>
<td>OSX.3+</td>
<td>1.8</td>
<td>A</td>
</tr>
<tr class="odd" role="row">
<td class="sorting_1">Gecko</td>
<td>Netscape 7.2</td>
<td>Win 95+ / Mac OS 8.6-9.2</td>
<td>1.7</td>
<td>A</td>
</tr>
<tr class="even" role="row">
<td class="sorting_1">Gecko</td>
<td>Netscape Browser 8</td>
<td>Win 98SE+</td>
<td>1.7</td>
<td>A</td>
</tr>
<tr class="odd" role="row">
<td class="sorting_1">Gecko</td>
<td>Netscape Navigator 9</td>
<td>Win 98+ / OSX.2+</td>
<td>1.8</td>
<td>A</td>
</tr>
<tr class="even" role="row">
<td class="sorting_1">Gecko</td>
<td>Mozilla 1.0</td>
<td>Win 95+ / OSX.1+</td>
<td>1</td>
<td>A</td>
</tr>
</tbody>
<tfoot>
<tr>
<th colspan="1" rowspan="1">Rendering engine</th>
<th colspan="1" rowspan="1">Browser</th>
<th colspan="1" rowspan="1">Platform(s)</th>
<th colspan="1" rowspan="1">Engine version</th>
<th colspan="1" rowspan="1">CSS grade</th>
</tr>
</tfoot>
</table>
</div>
</div>
</div>
<!-- /.box-body -->
</div>
</div>
</div>
</div>
</section>
</template>
<script>
import $ from 'jquery'
// Require needed datatables modules
require('datatables.net')
require('datatables.net-bs')
export default {
name: 'Tables',
mounted() {
this.$nextTick(() => {
$('#example1').DataTable()
})
}
}
</script>
<style>
/* Using the bootstrap style, but overriding the font to not draw in
the Glyphicons Halflings font as an additional requirement for sorting icons.
An alternative to the solution active below is to use the jquery style
which uses images, but the color on the images does not match adminlte.
@import url('/static/js/plugins/datatables/jquery.dataTables.min.css');
*/
@import url('/static/js/plugins/datatables/dataTables.bootstrap.css');
table.dataTable thead .sorting:after,
table.dataTable thead .sorting_asc:after,
table.dataTable thead .sorting_desc:after {
font-family: 'FontAwesome';
}
table.dataTable thead .sorting:after {
content: '\f0dc';
}
table.dataTable thead .sorting_asc:after {
content: '\f0dd';
}
table.dataTable thead .sorting_desc:after {
content: '\f0de';
}
</style>

View File

@ -1,50 +0,0 @@
<template>
<section class="content">
<div class="row center-block">
<h1 class="text-center">Tasks</h1>
<ul class="timeline">
<!-- timeline time label -->
<li class="time-label">
<span class="bg-green">{{today}}</span>
</li>
<!-- timeline item -->
<li v-for="line in timeline">
<!-- timeline icon -->
<i v-bind:class="'fa ' + line.icon + ' bg-' + line.color"></i>
<div class="timeline-item">
<span class="time"><i class="fa fa-clock-o"></i>&nbsp;{{line.time}}</span>
<h3 class="timeline-header">{{line.title}}</h3>
<div class="timeline-body" v-if="line.body" v-html="line.body">
</div>
<div class="timeline-footer" v-if="line.buttons">
<a v-for="btn in line.buttons" v-bind:class="'btn btn-' + btn.type + ' btn-xs'" v-bind:href="btn.href" v-bind:target="btn.target">{{btn.message}}</a>
</div>
</div>
</li>
<!-- END timeline item -->
</ul>
</div>
</section>
</template>
<script>
import moment from 'moment'
import {timeline} from '../../demo'
export default {
name: 'Tasks',
computed: {
today () {
return moment().format('MMM Do YY')
},
timeline () {
return timeline
}
}
}
</script>
<style>
.timeline-footer a.btn {
margin-right: 10px;
}
</style>

View File

@ -1,24 +1,19 @@
import DashView from './components/Dash.vue'
import LoginView from './components/Login.vue'
// import LoginView from './components/Login.vue'
import NotFoundView from './components/404.vue'
// Import Views - Dash
import DashboardView from './components/views/Dashboard.vue'
import TablesView from './components/views/Tables.vue'
import TasksView from './components/views/Tasks.vue'
import SettingView from './components/views/Setting.vue'
import AccessView from './components/views/Access.vue'
import ServerView from './components/views/Server.vue'
// Sthope Views
import CryptosView from './components/views/Cryptos.vue'
import PersonalFinancesView from './components/views/PersonalFinances.vue'
import ConfigurationsView from './components/views/Configurations.vue'
// Routes
const routes = [
{
path: '/login',
component: LoginView
},
// {
// path: '/login',
// component: LoginView
// },
{
path: '/',
component: DashView,
@ -28,49 +23,18 @@ const routes = [
alias: '',
component: PersonalFinancesView,
name: 'Personal Finances',
meta: {description: 'Overview of environment'}
meta: {description: ''}
},
{
path: 'dashboard',
alias: '',
component: DashboardView,
name: 'Dashboard',
meta: {description: 'Overview of environment', requiresAuth: false}
}, {
path: 'tables',
component: TablesView,
name: 'Tables',
meta: {description: 'Simple and advance table in CoPilot', requiresAuth: false}
}, {
path: 'tasks',
component: TasksView,
name: 'Tasks',
meta: {description: 'Tasks page in the form of a timeline', requiresAuth: false}
}, {
path: 'setting',
component: SettingView,
name: 'Settings',
meta: {description: 'User settings page', requiresAuth: false}
}, {
path: 'access',
component: AccessView,
name: 'Access',
meta: {description: 'Example of using maps', requiresAuth: false}
}, {
path: 'server',
component: ServerView,
name: 'Servers',
meta: {description: 'List of our servers', requiresAuth: false}
}, {
path: 'cryptos',
component: CryptosView,
name: 'Cryptos',
meta: {description: 'List of popular javascript repos', requiresAuth: false}
meta: {description: '', requiresAuth: false}
}, {
path: 'configurations',
component: ConfigurationsView,
name: 'Configurations',
meta: {description: 'List of popular javascript repos', requiresAuth: false}
meta: {description: '', requiresAuth: false}
}
]
}, {