浏览代码

Design the initial structure of user dashboard

Mohidul Islam 4 年之前
父节点
当前提交
bd8e457622

文件差异内容过多而无法显示
+ 1 - 0
dashboard/static/jquery-slim.min.js


+ 85 - 0
dashboard/static/user-dashboard.css

@@ -0,0 +1,85 @@
+body {
+  font-size: .875rem;
+}
+
+.feather {
+  width: 16px;
+  height: 16px;
+  vertical-align: text-bottom;
+}
+
+.sidebar {
+  position: fixed;
+  top: 0;
+  bottom: 0;
+  left: 0;
+  z-index: 100; /* Behind the navbar */
+  padding: 0;
+  box-shadow: inset -1px 0 0 rgba(0, 0, 0, .1);
+}
+
+.sidebar-sticky {
+  position: -webkit-sticky;
+  position: sticky;
+  top: 48px; /* Height of navbar */
+  height: calc(100vh - 48px);
+  padding-top: .5rem;
+  overflow-x: hidden;
+  overflow-y: auto; /* Scrollable contents if viewport is shorter than content. */
+}
+
+.sidebar .nav-link {
+  font-weight: 500;
+  color: #333;
+}
+
+.sidebar .nav-link .feather {
+  margin-right: 4px;
+  color: #999;
+}
+
+.sidebar .nav-link.active {
+  color: #007bff;
+}
+
+.sidebar .nav-link:hover .feather,
+.sidebar .nav-link.active .feather {
+  color: inherit;
+}
+
+.sidebar-heading {
+  font-size: .75rem;
+  text-transform: uppercase;
+}
+
+/*
+ * Navbar
+ */
+
+.navbar-brand {
+  padding-top: .75rem;
+  padding-bottom: .75rem;
+  font-size: 1rem;
+  background-color: rgba(0, 0, 0, .25);
+  box-shadow: inset -1px 0 0 rgba(0, 0, 0, .25);
+}
+
+.navbar .form-control {
+  padding: .75rem 1rem;
+  border-width: 0;
+  border-radius: 0;
+}
+
+.form-control-dark {
+  color: #fff;
+  background-color: rgba(255, 255, 255, .1);
+  border-color: rgba(255, 255, 255, .1);
+}
+
+.form-control-dark:focus {
+  border-color: transparent;
+  box-shadow: 0 0 0 3px rgba(255, 255, 255, .25);
+}
+
+.border-top { border-top: 1px solid #e5e5e5; }
+.border-bottom { border-bottom: 1px solid #e5e5e5; }

+ 75 - 0
user/templates/_navbar.html

@@ -0,0 +1,75 @@
+<nav class="col-md-2 d-none d-md-block bg-light sidebar">
+  <div class="sidebar-sticky">
+    <ul class="nav flex-column">
+      <li class="nav-item">
+        <a class="nav-link active" href="#">
+          <span data-feather="home"></span>
+          Dashboard <span class="sr-only">(current)</span>
+        </a>
+      </li>
+      <li class="nav-item">
+        <a class="nav-link" href="#">
+          <span data-feather="file"></span>
+          Orders
+        </a>
+      </li>
+      <li class="nav-item">
+        <a class="nav-link" href="#">
+          <span data-feather="shopping-cart"></span>
+          Products
+        </a>
+      </li>
+      <li class="nav-item">
+        <a class="nav-link" href="#">
+          <span data-feather="users"></span>
+          Customers
+        </a>
+      </li>
+      <li class="nav-item">
+        <a class="nav-link" href="#">
+          <span data-feather="bar-chart-2"></span>
+          Reports
+        </a>
+      </li>
+      <li class="nav-item">
+        <a class="nav-link" href="#">
+          <span data-feather="layers"></span>
+          Integrations
+        </a>
+      </li>
+    </ul>
+
+    <h6 class="sidebar-heading d-flex justify-content-between align-items-center px-3 mt-4 mb-1 text-muted">
+      <span>Saved reports</span>
+      <a class="d-flex align-items-center text-muted" href="#">
+        <span data-feather="plus-circle"></span>
+      </a>
+    </h6>
+    <ul class="nav flex-column mb-2">
+      <li class="nav-item">
+        <a class="nav-link" href="#">
+          <span data-feather="file-text"></span>
+          Current month
+        </a>
+      </li>
+      <li class="nav-item">
+        <a class="nav-link" href="#">
+          <span data-feather="file-text"></span>
+          Last quarter
+        </a>
+      </li>
+      <li class="nav-item">
+        <a class="nav-link" href="#">
+          <span data-feather="file-text"></span>
+          Social engagement
+        </a>
+      </li>
+      <li class="nav-item">
+        <a class="nav-link" href="#">
+          <span data-feather="file-text"></span>
+          Year-end sale
+        </a>
+      </li>
+    </ul>
+  </div>
+</nav>

+ 66 - 0
user/templates/user-base.html

@@ -0,0 +1,66 @@
+{% load static %}
+<html lang="en">
+  <head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+    <meta name="description" content="">
+    <meta name="author" content="">
+    <title>Byte Trek Review Bot</title>
+    <link rel="canonical" href="https://getbootstrap.com/docs/4.0/examples/dashboard/">
+    <!-- Bootstrap core CSS -->
+    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
+    <!-- Custom styles for this template -->
+    <link rel="stylesheet" type="text/css" href="{% static 'user-dashboard.css' %}">
+  </head>
+
+  <body>
+    <nav class="navbar navbar-dark sticky-top bg-dark flex-md-nowrap p-0">
+      <a class="navbar-brand col-sm-3 col-md-2 mr-0" href="#">BT Review Bot</a>
+      <ul class="navbar-nav px-3">
+        <li class="nav-item text-nowrap">
+          <a class="nav-link" href="#">Sign out</a>
+        </li>
+      </ul>
+    </nav>
+
+    <div class="container-fluid">
+      <div class="row">
+        {% include '_navbar.html' %}
+
+        <main role="main" class="col-md-9 ml-sm-auto col-lg-10 pt-3 px-4">
+          <div class="d-flex justify-content-between flex-wrap flex-md-nowrap align-items-center pb-2 mb-3 border-bottom">
+            <h1 class="h2">Dashboard</h1>
+            <div class="btn-toolbar mb-2 mb-md-0">
+              <div class="btn-group mr-2">
+                <button class="btn btn-sm btn-outline-secondary">Export</button>
+              </div>
+              <button class="btn btn-sm btn-outline-secondary dropdown-toggle">
+                <span data-feather="calendar"></span>
+                This week
+              </button>
+            </div>
+          </div>
+          {% block content %}
+          {% endblock %}
+        </main>
+      </div>
+    </div>
+
+    <!-- Bootstrap core JavaScript
+    ================================================== -->
+    <!-- Placed at the end of the document so the pages load faster -->
+    <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
+    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>
+    <script>window.jQuery || document.write('<script src="/static/jquery-slim.min.js"><\/script>')</script>
+
+
+    <!-- Icons -->
+    <script src="https://unpkg.com/feather-icons/dist/feather.min.js"></script>
+    <script>
+      feather.replace()
+    </script>
+
+    <!-- Graphs -->
+  </body>
+</html>

+ 200 - 0
user/templates/user-dashboard.html

@@ -0,0 +1,200 @@
+{% extends 'user-base.html' %}
+{% block content %}
+
+<!--cart-->
+<div class="row">
+
+  <div class="col-sm-6 col-md-4">
+      <div class="card text-white bg-secondary mb-3">
+      <div class="card-header"><h5 class="card-title">Google</h5></div>
+        <div class="card-body">
+          <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
+        </div>
+      </div>
+  </div>
+
+  <div class="col-sm-6 col-md-4">
+      <div class="card text-white bg-danger mb-3">
+      <div class="card-header"><h5 class="card-title">Yelp</h5></div>
+        <div class="card-body">
+          <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
+        </div>
+      </div>
+  </div>
+
+  <div class="col-sm-6 col-md-4">
+      <div class="card text-white bg-primary mb-3">
+      <div class="card-header"><h5 class="card-title">Facebook</h5></div>
+        <div class="card-body">
+          <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
+        </div>
+      </div>
+  </div>
+
+</div>
+
+<!--    canvas-->
+  <canvas class="my-4" id="myChart" width="900" height="350"></canvas>
+
+  <h2>Section title</h2>
+  <div class="table-responsive">
+  <table class="table table-striped table-sm">
+    <thead>
+      <tr>
+        <th>#</th>
+        <th>Header</th>
+        <th>Header</th>
+        <th>Header</th>
+        <th>Header</th>
+      </tr>
+    </thead>
+    <tbody>
+      <tr>
+        <td>1,001</td>
+        <td>Lorem</td>
+        <td>ipsum</td>
+        <td>dolor</td>
+        <td>sit</td>
+      </tr>
+      <tr>
+        <td>1,002</td>
+        <td>amet</td>
+        <td>consectetur</td>
+        <td>adipiscing</td>
+        <td>elit</td>
+      </tr>
+      <tr>
+        <td>1,003</td>
+        <td>Integer</td>
+        <td>nec</td>
+        <td>odio</td>
+        <td>Praesent</td>
+      </tr>
+      <tr>
+        <td>1,003</td>
+        <td>libero</td>
+        <td>Sed</td>
+        <td>cursus</td>
+        <td>ante</td>
+      </tr>
+      <tr>
+        <td>1,004</td>
+        <td>dapibus</td>
+        <td>diam</td>
+        <td>Sed</td>
+        <td>nisi</td>
+      </tr>
+      <tr>
+        <td>1,005</td>
+        <td>Nulla</td>
+        <td>quis</td>
+        <td>sem</td>
+        <td>at</td>
+      </tr>
+      <tr>
+        <td>1,006</td>
+        <td>nibh</td>
+        <td>elementum</td>
+        <td>imperdiet</td>
+        <td>Duis</td>
+      </tr>
+      <tr>
+        <td>1,007</td>
+        <td>sagittis</td>
+        <td>ipsum</td>
+        <td>Praesent</td>
+        <td>mauris</td>
+      </tr>
+      <tr>
+        <td>1,008</td>
+        <td>Fusce</td>
+        <td>nec</td>
+        <td>tellus</td>
+        <td>sed</td>
+      </tr>
+      <tr>
+        <td>1,009</td>
+        <td>augue</td>
+        <td>semper</td>
+        <td>porta</td>
+        <td>Mauris</td>
+      </tr>
+      <tr>
+        <td>1,010</td>
+        <td>massa</td>
+        <td>Vestibulum</td>
+        <td>lacinia</td>
+        <td>arcu</td>
+      </tr>
+      <tr>
+        <td>1,011</td>
+        <td>eget</td>
+        <td>nulla</td>
+        <td>Class</td>
+        <td>aptent</td>
+      </tr>
+      <tr>
+        <td>1,012</td>
+        <td>taciti</td>
+        <td>sociosqu</td>
+        <td>ad</td>
+        <td>litora</td>
+      </tr>
+      <tr>
+        <td>1,013</td>
+        <td>torquent</td>
+        <td>per</td>
+        <td>conubia</td>
+        <td>nostra</td>
+      </tr>
+      <tr>
+        <td>1,014</td>
+        <td>per</td>
+        <td>inceptos</td>
+        <td>himenaeos</td>
+        <td>Curabitur</td>
+      </tr>
+      <tr>
+        <td>1,015</td>
+        <td>sodales</td>
+        <td>ligula</td>
+        <td>in</td>
+        <td>libero</td>
+      </tr>
+    </tbody>
+  </table>
+</div>
+
+
+<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.1/Chart.min.js"></script>
+
+<script>
+  var ctx = document.getElementById("myChart");
+  var myChart = new Chart(ctx, {
+    type: 'line',
+    data: {
+      labels: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
+      datasets: [{
+        data: [15339, 21345, 18483, 24003, 23489, 24092, 12034],
+        lineTension: 0,
+        backgroundColor: 'transparent',
+        borderColor: '#007bff',
+        borderWidth: 4,
+        pointBackgroundColor: '#007bff'
+      }]
+    },
+    options: {
+      scales: {
+        yAxes: [{
+          ticks: {
+            beginAtZero: false
+          }
+        }]
+      },
+      legend: {
+        display: false,
+      }
+    }
+  });
+</script>
+{% endblock %}

+ 2 - 1
user/urls.py

@@ -1,9 +1,10 @@
 from django.urls import path
 from django.contrib.auth import views as auth_views
-from .views import RegistrationView
+from .views import RegistrationView, LocationAnalytics
 
 urlpatterns = [
     path('login/', auth_views.LoginView.as_view(template_name='login.html'), name='login'),
     path('logout/', auth_views.LogoutView.as_view(template_name='logout.html'), name='logout'),
     path('signup', RegistrationView.as_view(), name='registration'),
+    path('analytics', LocationAnalytics.as_view(), name='location-analytics'),
 ]

+ 0 - 0
user/utils.py


+ 8 - 0
user/views.py

@@ -26,3 +26,11 @@ class RegistrationView(View):
                 messages.warning(request, f'Sorry, We don\'t have any location with this email!')
 
         return render(request, 'signup.html', {'form': form})
+
+
+class LocationAnalytics(View):
+    def get(self, requests, *args, **kwargs):
+        context = {
+            'labels': ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
+        }
+        return render(requests, 'user-dashboard.html', context=context)

部分文件因为文件数量过多而无法显示