init project

This commit is contained in:
saeid
2019-04-14 21:13:55 +04:30
commit 9f2acb855c
213 changed files with 124305 additions and 0 deletions
+33
View File
@@ -0,0 +1,33 @@
/**
* First we will load all of this project's JavaScript dependencies which
* includes Vue and other libraries. It is a great starting point when
* building robust, powerful web applications using Vue and Laravel.
*/
require('./bootstrap');
window.Vue = require('vue');
/**
* The following block of code may be used to automatically register your
* Vue components. It will recursively scan this directory for the Vue
* components and automatically register them with their "basename".
*
* Eg. ./components/ExampleComponent.vue -> <example-component></example-component>
*/
// const files = require.context('./', true, /\.vue$/i);
// files.keys().map(key => Vue.component(key.split('/').pop().split('.')[0], files(key).default));
Vue.component('example-component', require('./components/ExampleComponent.vue').default);
/**
* Next, we will create a fresh Vue application instance and attach it to
* the page. Then, you may begin adding components to this application
* or customize the JavaScript scaffolding to fit your unique needs.
*/
const app = new Vue({
el: '#app'
});
+56
View File
@@ -0,0 +1,56 @@
window._ = require('lodash');
/**
* We'll load jQuery and the Bootstrap jQuery plugin which provides support
* for JavaScript based Bootstrap features such as modals and tabs. This
* code may be modified to fit the specific needs of your application.
*/
try {
window.Popper = require('popper.js').default;
window.$ = window.jQuery = require('jquery');
require('bootstrap');
} catch (e) {}
/**
* We'll load the axios HTTP library which allows us to easily issue requests
* to our Laravel back-end. This library automatically handles sending the
* CSRF token as a header based on the value of the "XSRF" token cookie.
*/
window.axios = require('axios');
window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
/**
* Next we will register the CSRF Token as a common header with Axios so that
* all outgoing HTTP requests automatically have it attached. This is just
* a simple convenience so we don't have to attach every token manually.
*/
let token = document.head.querySelector('meta[name="csrf-token"]');
if (token) {
window.axios.defaults.headers.common['X-CSRF-TOKEN'] = token.content;
} else {
console.error('CSRF token not found: https://laravel.com/docs/csrf#csrf-x-csrf-token');
}
/**
* Echo exposes an expressive API for subscribing to channels and listening
* for events that are broadcast by Laravel. Echo and event broadcasting
* allows your team to easily build robust real-time web applications.
*/
// import Echo from 'laravel-echo'
// window.Pusher = require('pusher-js');
// window.Echo = new Echo({
// broadcaster: 'pusher',
// key: process.env.MIX_PUSHER_APP_KEY,
// cluster: process.env.MIX_PUSHER_APP_CLUSTER,
// encrypted: true
// });
@@ -0,0 +1,23 @@
<template>
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
<div class="card">
<div class="card-header">Example Component</div>
<div class="card-body">
I'm an example component.
</div>
</div>
</div>
</div>
</div>
</template>
<script>
export default {
mounted() {
console.log('Component mounted.')
}
}
</script>
+29
View File
@@ -0,0 +1,29 @@
<template>
<v-app>
<!-- <core-filter /> -->
<core-toolbar />
<core-drawer />
<core-view />
</v-app>
</template>
<script>
export default {
}
</script>
<style lang="scss">
@import '@/styles/index.scss';
@import '@/styles/css/Assets/Main.scss';
@import '@/styles/css/Assets/WM-ModernTheme.scss';
// @import '@/fontello/fontello-embedded.scss';
/* Remove in 1.2 */
.v-datatable thead th.column.sortable i {
vertical-align: unset;
}
</style>
+188
View File
@@ -0,0 +1,188 @@
<template>
<v-navigation-drawer
id="app-drawer"
v-model="inputValue"
app
dark
floating
persistent
mobile-break-point="991"
width="260"
>
<v-img
:src="image"
height="100%"
>
<v-layout
class="fill-height"
tag="v-list"
column
>
<v-list-tile avatar>
<v-list-tile-avatar
color="white"
>
<!-- <v-img
:src="logo"
height="34"
contain
/> -->
</v-list-tile-avatar>
<v-list-tile-title class="title">
CSSD-DOC
</v-list-tile-title>
</v-list-tile>
<v-divider/>
<v-list-tile
v-if="responsive"
>
<v-text-field
class="purple-input search-input"
label="Search..."
color="purple"
/>
</v-list-tile>
<v-list-tile
v-for="(link, i) in links"
:key="i"
:to="link.to"
:active-class="color"
avatar
class="v-list-item"
>
<v-list-tile-action>
<v-icon>{{ link.icon }}</v-icon>
</v-list-tile-action>
<v-list-tile-title
v-text="link.text"
/>
</v-list-tile>
<!-- <v-list-tile
disabled
active-class="primary"
class="v-list-item v-list__tile--buy"
to="/upgrade"
>
<v-list-tile-action>
<v-icon>mdi-package-up</v-icon>
</v-list-tile-action>
<v-list-tile-title class="font-weight-light">
Upgrade To PRO
</v-list-tile-title>
</v-list-tile> -->
</v-layout>
</v-img>
</v-navigation-drawer>
</template>
<script>
// Utilities
import {
mapMutations,
mapState
} from 'vuex'
export default {
data: () => ({
logo: './img/vuetifylogo.png',
links: [
{
to: '/dashboard',
icon: 'mdi-view-dashboard',
text: 'Dashboard'
},
{
to: '/my-info',
icon: 'mdi-account',
text: 'My Info'
},
{
to: '/all-resualttest',
icon: 'description',
text: 'All Test Result'
},
{
to: '/manage-users',
icon: 'far fa-address-book',
text: 'Manage Users'
},
{
to: '/test-creator',
icon: 'fas fa-vial',
text: 'Add a Test Type'
},
{
to: '/submit-test-result',
icon: 'done',
text: 'Submit Test Result'
},
{
to: '/login',
icon: 'input',
text: 'Login'
},
{
to: '/register',
icon: 'fas fa-plus',
text: 'Register'
},
],
responsive: false
}),
computed: {
...mapState('app', ['image', 'color']),
inputValue: {
get () {
return this.$store.state.app.drawer
},
set (val) {
this.setDrawer(val)
}
},
items () {
return this.$t('Layout.View.items')
}
},
mounted () {
this.onResponsiveInverted()
window.addEventListener('resize', this.onResponsiveInverted)
},
beforeDestroy () {
window.removeEventListener('resize', this.onResponsiveInverted)
},
methods: {
...mapMutations('app', ['setDrawer', 'toggleDrawer']),
onResponsiveInverted () {
if (window.innerWidth < 991) {
this.responsive = true
} else {
this.responsive = false
}
}
}
}
</script>
<style lang="scss">
#app-drawer {
.v-list__tile {
border-radius: 4px;
&--buy {
margin-top: auto;
margin-bottom: 17px;
}
}
.v-image__image--contain {
top: 9px;
height: 60%;
}
.search-input {
margin-bottom: 30px !important;
padding-left: 15px;
padding-right: 15px;
}
}
</style>
+161
View File
@@ -0,0 +1,161 @@
<template>
<v-menu
:close-on-content-click="false"
bottom
left
min-width="300"
max-width="300"
nudge-left="12"
offset-x
transition="slide-y-transition"
>
<v-btn
slot="activator"
class="elevation-0"
color="grey"
dark
fab
fixed
style="top: 96px;"
top
>
<v-icon>mdi-settings</v-icon>
</v-btn>
<v-card>
<v-container grid-list-xl>
<v-layout wrap>
<v-flex xs12>
<div class="text-xs-center body-2 text-uppercase sidebar-filter">Sidebar Filters</div>
<v-layout justify-center>
<v-avatar
v-for="c in colors"
:key="c"
:class="[c === color ? 'color-active color-' + c: 'color-' + c]"
size="23"
@click="setColor(c)"
/>
</v-layout>
<v-divider class="mt-3"/>
</v-flex>
<v-flex
xs12
>
<div class="text-xs-center body-2 text-uppercase sidebar-filter">Images</div>
</v-flex>
<v-flex
v-for="img in images"
:key="img"
xs3
>
<v-img
:class="[image === img ? 'image-active' : '']"
:src="img"
height="120"
@click.native="setImage(img)"
/>
</v-flex>
<v-flex xs12>
<v-btn
href="https://www.creative-tim.com/product/vuetify-material-dashboard"
target="_blank"
color="success"
block
>
Free Download
</v-btn>
</v-flex>
<v-flex xs12>
<v-btn
href="https://demos.creative-tim.com/vuetify-material-dashboard/documentation"
target="_blank"
class="white--text"
color="primary"
block
>
Documentation
</v-btn>
</v-flex>
<v-flex xs12>
<div class="text-xs-center body-2 text-uppercase">
<div class=" sidebar-filter">
Thank You for Sharing!
</div>
<div>
<v-btn
color="indigo"
class="mr-2 v-btn-facebook"
fab
icon
small
round
>
<v-icon>mdi-facebook</v-icon>
</v-btn>
<v-btn
color="cyan"
class="v-btn-twitter"
fab
icon
small
round
>
<v-icon>mdi-twitter</v-icon>
</v-btn>
</div>
</div>
</v-flex>
</v-layout>
</v-container>
</v-card>
</v-menu>
</template>
<script>
// Utilities
import {
mapMutations,
mapState
} from 'vuex'
export default {
data: () => ({
colors: [
'primary',
'info',
'success',
'warning',
'danger'
],
images: [
'https://demos.creative-tim.com/vue-material-dashboard/img/sidebar-1.23832d31.jpg',
'https://demos.creative-tim.com/vue-material-dashboard/img/sidebar-2.32103624.jpg',
'https://demos.creative-tim.com/vue-material-dashboard/img/sidebar-3.3a54f533.jpg',
'https://demos.creative-tim.com/vue-material-dashboard/img/sidebar-4.3b7e38ed.jpg'
]
}),
computed: {
...mapState('app', ['image', 'color']),
color () {
return this.$store.state.app.color
}
},
methods: {
...mapMutations('app', ['setImage']),
setColor (color) {
this.$store.state.app.color = color
}
}
}
</script>
<style lang="scss">
.v-avatar,
.v-responsive {
cursor: pointer;
}
</style>
@@ -0,0 +1,49 @@
<template>
<v-footer
id="core-footer"
absolute
height="82"
>
<div class="footer-items">
<span
v-for="link in links"
:key="link.name"
>
<a
:href="link.Link"
class="tertiary--text footer-links">{{ link.name }}</a>
</span>
</div>
<v-spacer/>
<!-- <span class="font-weight-light copyright">
&copy;
{{ (new Date()).getFullYear() }}
<a
href="https://www.creative-tim.com/"
target="_blank">Creative Tim</a>, made with
<v-icon
color="tertiary"
size="17">mdi-heart</v-icon>
for a better web
</span> -->
</v-footer>
</template>
<script>
export default {
data: () => ({
links: [
{ name: 'Home', Link: '/dashboard' },
// { name: 'Creative Tim', Link: 'https://www.creative-tim.com' },
{ name: 'About Us', Link: 'https://creative-tim.com/presentation' },
// { name: 'Blog', Link: 'https://blog.creative-tim.com' }
]
})
}
</script>
<style>
#core-footer {
z-index: 0;
}
</style>
@@ -0,0 +1,154 @@
<template>
<v-toolbar
id="core-toolbar"
flat
prominent
style="background: #eee;"
>
<div class="v-toolbar-title">
<v-toolbar-title
class="tertiary--text font-weight-light"
>
<v-btn
v-if="responsive"
class="default v-btn--simple"
dark
icon
@click.stop="onClickBtn"
>
<v-icon>mdi-view-list</v-icon>
</v-btn>
{{ title }}
</v-toolbar-title>
</div>
<v-spacer />
<v-toolbar-items>
<v-flex
align-center
layout
py-2
>
<v-text-field
v-if="responsiveInput"
class="mr-4 mt-2 purple-input"
label="Search..."
hide-details
color="purple"
/>
<router-link
v-ripple
class="toolbar-items"
to="/"
>
<v-icon color="tertiary">mdi-view-dashboard</v-icon>
</router-link>
<v-menu
bottom
left
content-class="dropdown-menu"
offset-y
transition="slide-y-transition">
<router-link
v-ripple
slot="activator"
class="toolbar-items"
to="/notifications"
>
<v-badge
color="error"
overlap
>
<template slot="badge">
{{ notifications.length }}
</template>
<v-icon color="tertiary">mdi-bell</v-icon>
</v-badge>
</router-link>
<v-card>
<v-list dense>
<v-list-tile
v-for="notification in notifications"
:key="notification"
@click="onClick"
>
<v-list-tile-title
v-text="notification"
/>
</v-list-tile>
</v-list>
</v-card>
</v-menu>
<router-link
v-ripple
class="toolbar-items"
to="/user-profile"
>
<v-icon color="tertiary">mdi-account</v-icon>
</router-link>
</v-flex>
</v-toolbar-items>
</v-toolbar>
</template>
<script>
import {
mapMutations
} from 'vuex'
export default {
data: () => ({
notifications: [
'Mike, John responded to your email',
'You have 5 new tasks',
'You\'re now a friend with Andrew',
'Another Notification',
'Another One'
],
title: null,
responsive: false,
responsiveInput: false
}),
watch: {
'$route' (val) {
this.title = val.name
}
},
mounted () {
this.onResponsiveInverted()
window.addEventListener('resize', this.onResponsiveInverted)
},
beforeDestroy () {
window.removeEventListener('resize', this.onResponsiveInverted)
},
methods: {
...mapMutations('app', ['setDrawer', 'toggleDrawer']),
onClickBtn () {
this.setDrawer(!this.$store.state.app.drawer)
},
onClick () {
//
},
onResponsiveInverted () {
if (window.innerWidth < 991) {
this.responsive = true
this.responsiveInput = false
} else {
this.responsive = false
this.responsiveInput = true
}
}
}
}
</script>
<style>
#core-toolbar a {
text-decoration: none;
}
</style>
+26
View File
@@ -0,0 +1,26 @@
<template>
<v-content>
<div id="core-view">
<v-fade-transition mode="out-in">
<router-view />
</v-fade-transition>
</div>
<core-footer v-if="$route.name !== 'Maps'" />
</v-content>
</template>
<script>
export default {
metaInfo () {
return {
title: 'Vuetify Material Dashboard by CreativeTim'
}
}
}
</script>
<style>
#core-view {
padding-bottom: 100px;
}
</style>
@@ -0,0 +1,49 @@
<template>
<div
:style="styles"
:class="classes"
class="v-offset"
>
<slot />
</div>
</template>
<script>
export default {
props: {
fullWidth: {
type: Boolean,
default: false
},
offset: {
type: [Number, String],
default: 0
}
},
computed: {
classes () {
return {
'v-offset--full-width': this.fullWidth
}
},
styles () {
return {
top: `-${this.offset}px`,
marginBottom: `-${this.offset}px`
}
}
}
}
</script>
<style>
.v-offset {
margin: 0 auto;
max-width: calc(100% - 32px);
position: relative;
}
.v-offset--full-width {
max-width: 100%;
}
</style>
+16
View File
@@ -0,0 +1,16 @@
import Vue from 'vue'
import upperFirst from 'lodash/upperFirst'
import camelCase from 'lodash/camelCase'
const requireComponent = require.context(
'@/components', true, /\.vue$/
)
requireComponent.keys().forEach(fileName => {
const componentConfig = requireComponent(fileName)
const componentName = upperFirst(
camelCase(fileName.replace(/^\.\//, '').replace(/\.\w+$/, ''))
)
Vue.component(componentName, componentConfig.default || componentConfig)
})
@@ -0,0 +1,118 @@
<template>
<v-card
v-bind="$attrs"
:style="styles"
v-on="$listeners"
>
<helper-offset
v-if="hasOffset"
:inline="inline"
:full-width="fullWidth"
:offset="offset"
>
<v-card
v-if="!$slots.offset"
:color="color"
:class="`elevation-${elevation}`"
class="v-card--material__header"
dark
>
<slot
v-if="!title && !text"
name="header"
/>
<span v-else>
<h4
class="title font-weight-light mb-2"
v-text="title"
/>
<p
class="category font-weight-thin"
v-text="text"
/>
</span>
</v-card>
<slot
v-else
name="offset"
/>
</helper-offset>
<v-card-text>
<slot />
</v-card-text>
<v-divider
v-if="$slots.actions"
class="mx-3"
/>
<v-card-actions v-if="$slots.actions">
<slot name="actions" />
</v-card-actions>
</v-card>
</template>
<script>
export default {
inheritAttrs: false,
props: {
color: {
type: String,
default: 'secondary'
},
elevation: {
type: [Number, String],
default: 10
},
inline: {
type: Boolean,
default: false
},
fullWidth: {
type: Boolean,
default: false
},
offset: {
type: [Number, String],
default: 24
},
title: {
type: String,
default: undefined
},
text: {
type: String,
default: undefined
}
},
computed: {
hasOffset () {
return this.$slots.header ||
this.$slots.offset ||
this.title ||
this.text
},
styles () {
if (!this.hasOffset) return null
return {
marginBottom: `${this.offset}px`,
marginTop: `${this.offset * 2}px`
}
}
}
}
</script>
<style lang="scss">
.v-card--material {
&__header {
&.v-card {
border-radius: 4px;
}
}
}
</style>
@@ -0,0 +1,67 @@
<template>
<v-card :class="color">
<v-container>
<v-layout row wrap>
<v-flex xs7>
<v-card-text primary-text :class="aligntext">
<div>
<div class="headline ">{{title}}</div>
<div class="subheading WM-LightGray-color">{{text}}</div>
<div></div>
</div>
</v-card-text>
</v-flex>
<v-flex xs5 :class="alignimg" :style="{'background':'url('+ icon +') no-repeat center center', 'background-size':'contain','height':'150px'}">
</v-flex>
</v-layout>
</v-container>
</v-card>
</template>
<script>
export default {
props: {
bordercolor: {
type: String,
default: () => ''
},
title: {
type: String,
default: () => ''
},
text: {
type: String,
default: () => ''
},
icon: {
type: String,
default: () => ''
},
color : {
type: String,
default: () => ''
},
column : {
type: String,
default: () => ''
},
aligntext : {
type: String,
default: () => ''
},
alignimg : {
type: String,
default: () => ''
}
},
data () {
return {
}
},
computed: {
}
}
</script>
@@ -0,0 +1,85 @@
<template>
<material-card
v-bind="$attrs"
class="v-card--material-chart"
v-on="$listeners"
>
<chartist
slot="header"
:data="data"
:event-handlers="eventHandlers"
:options="options"
:ratio="ratio"
:responsive-options="responsiveOptions"
:type="type"
/>
<slot />
<slot
slot="actions"
name="actions"
/>
</material-card>
</template>
<script>
export default {
inheritAttrs: false,
props: {
data: {
type: Object,
default: () => ({})
},
eventHandlers: {
type: Array,
default: () => ([])
},
options: {
type: Object,
default: () => ({})
},
ratio: {
type: String,
default: undefined
},
responsiveOptions: {
type: Array,
default: () => ([])
},
type: {
type: String,
required: true,
validator: v => ['Bar', 'Line', 'Pie'].includes(v)
}
}
}
</script>
<style lang="scss">
.v-card--material-chart {
.v-card--material__header {
.ct-label {
color: inherit;
opacity: .7;
font-size: 0.975rem;
font-weight: 100;
}
.ct-grid{
stroke: rgba(255, 255, 255, 0.2);
}
.ct-series-a .ct-point,
.ct-series-a .ct-line,
.ct-series-a .ct-bar,
.ct-series-a .ct-slice-donut {
stroke: rgba(255,255,255,.8);
}
.ct-series-a .ct-slice-pie,
.ct-series-a .ct-area {
fill: rgba(255,255,255,.4);
}
}
}
</style>
@@ -0,0 +1,35 @@
<template>
<v-alert
v-bind="$attrs"
:class="[`elevation-${elevation}`]"
:value="value"
class="v-alert--notification"
v-on="$listeners"
>
<slot />
</v-alert>
</template>
<script>
export default {
inheritAttrs: false,
props: {
elevation: {
type: [Number, String],
default: 6
},
value: {
type: Boolean,
default: true
}
}
}
</script>
<style>
.v-alert--notification {
border-radius: 4px !important;
border-top: none !important;
}
</style>
@@ -0,0 +1,126 @@
<template>
<material-card
v-bind="$attrs"
class="v-card--material-stats"
v-on="$listeners"
>
<v-card
slot="offset"
:class="`elevation-${elevation}`"
:color="color"
class="pa-4"
dark
>
<v-icon
size="40"
>
{{ icon }}
</v-icon>
</v-card>
<div class="text-xs-right">
<p
class="category grey--text font-weight-light"
v-text="title"
/>
<h3
class="title display-1 font-weight-light">
{{ value }} <small>{{ smallValue }}</small>
</h3>
</div>
<template slot="actions">
<v-icon
:color="subIconColor"
size="20"
class="mr-2"
>
{{ subIcon }}
</v-icon>
<span
:class="subTextColor"
class="caption font-weight-light"
v-text="subText"
/>
</template>
</material-card>
</template>
<script>
import Card from './Card'
export default {
inheritAttrs: false,
props: {
...Card.props,
icon: {
type: String,
required: true
},
subIcon: {
type: String,
default: undefined
},
subIconColor: {
type: String,
default: undefined
},
subTextColor: {
type: String,
default: undefined
},
subText: {
type: String,
default: undefined
},
title: {
type: String,
default: undefined
},
value: {
type: String,
default: undefined
},
smallValue: {
type: String,
default: undefined
}
}
}
</script>
<style lang="scss">
.v-card--material-stats {
display: flex;
flex-wrap: wrap;
position: relative;
.v-offset {
display: inline-block;
flex: 0 1;
margin-top: 0;
margin-left: 0;
margin-right: auto;
margin-bottom: 0 !important;
max-width: auto;
padding: 0 16px 0;
}
.v-card {
border-radius: 4px;
flex: 0 1 auto;
}
.v-card__text {
display: inline-block;
position: absolute;
top: 0;
right: 0;
width: 100%;
}
.v-card__actions {
flex: 1 0 100%;
}
}
</style>
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+22
View File
@@ -0,0 +1,22 @@
/**
* Vue i18n
*
* @library
*
* http://kazupon.github.io/vue-i18n/en/
*/
// Lib imports
import Vue from 'vue'
import VueI18n from 'vue-i18n'
import messages from '@/lang'
Vue.use(VueI18n)
const i18n = new VueI18n({
locale: 'en',
fallbackLocale: 'en',
messages
})
export default i18n
+3
View File
@@ -0,0 +1,3 @@
{
"needHelp": "Need Help?"
}
@@ -0,0 +1,6 @@
{
"facebook": "Facebook",
"footer": "Footer",
"github": "Github",
"twitter": "Twitter"
}
@@ -0,0 +1,3 @@
{
"title": "Title"
}
+6
View File
@@ -0,0 +1,6 @@
{
"title": "Vuetify Alpha",
"footer": "2018 Vuetify LLC",
"drawerItems": ["Inspire"],
"needHelp": "Need help?"
}
+27
View File
@@ -0,0 +1,27 @@
// http://kazupon.github.io/vue-i18n/en/messages.html
const requireLang = require.context(
'@/lang',
true,
/\.json$/
)
const messages = {}
for (const file of requireLang.keys()) {
if (file === './index.js') continue
const path = file.replace(/(\.\/|\.json$)/g, '').split('/')
path.reduce((o, s, i) => {
if (o[s]) return o[s]
o[s] = i + 1 === path.length
? requireLang(file)
: {}
return o[s]
}, messages)
}
export default messages
+42
View File
@@ -0,0 +1,42 @@
import 'font-awesome/css/font-awesome.min.css'
import Vue from 'vue'
// Components
import './components'
// Plugins
import './plugins'
// Material FontIcon
import 'material-design-icons-iconfont/dist/material-design-icons.css'
// Fortawesome
import '@fortawesome/fontawesome-free/css/all.css'
// Sync router with store
import { sync } from 'vuex-router-sync'
// Application imports
import App from './App.vue'
import i18n from '@/i18n'
import router from '@/router'
import store from '@/store'
import { ApiService, TokenService } from '@/services'
// Sync store with router
sync(store, router)
Vue.config.productionTip = false
// Set the base URL of the API
ApiService.init(process.env.MIX_APP_ROOT_API)
// If token exists set header
if (TokenService.getToken()) {
ApiService.setHeader()
}
/* eslint-disable no-new */
new Vue({
i18n,
router,
store,
render: h => h(App),
iconfont: 'fa4'
}).$mount('#app');
+6
View File
@@ -0,0 +1,6 @@
import Vue from 'vue'
// Lib imports
import axios from 'axios'
Vue.prototype.$http = axios
+4
View File
@@ -0,0 +1,4 @@
import Vue from 'vue'
import 'chartist/dist/chartist.min.css'
Vue.use(require('vue-chartist'))
+3
View File
@@ -0,0 +1,3 @@
import './axios'
import './chartist'
import './vuetify'
+10
View File
@@ -0,0 +1,10 @@
export default {
primary: '#4caf50',
secondary: '#4caf50',
tertiary: '#495057',
accent: '#82B1FF',
error: '#f55a4e',
info: '#00d3ee',
success: '#5cb860',
warning: '#ffa21a'
}
+10
View File
@@ -0,0 +1,10 @@
import Vue from 'vue'
import Vuetify from 'vuetify'
import theme from './theme'
import 'vuetify/dist/vuetify.min.css'
import '@mdi/font/css/materialdesignicons.css'
Vue.use(Vuetify, {
iconfont: 'mdi',
theme
})
+87
View File
@@ -0,0 +1,87 @@
/**
* Vue Router
*
* @library
*
* https://router.vuejs.org/en/
*/
// Lib imports
import Vue from 'vue'
import VueAnalytics from 'vue-analytics'
import Router from 'vue-router'
import Meta from 'vue-meta'
import { TokenService } from '@/services'
// Routes
import paths from './paths'
function route (options) {
let path = options.path;
let view = options.view;
let name = options.name;
let meta = (path.meta) ? path.meta : '';
return {
name: name || view,
path,
meta,
component: (resovle) => import(
`@/views/${view}.vue`
).then(resovle)
}
}
Vue.use(Router)
// Create a new router
const router = new Router({
mode: 'history',
routes: paths.map(path => route(path)).concat([
{ path: '*', redirect: '/dashboard' }
]),
scrollBehavior (to, from, savedPosition) {
if (savedPosition) {
return savedPosition
}
if (to.hash) {
return { selector: to.hash }
}
return { x: 0, y: 0 }
}
})
Vue.use(Meta)
router.beforeEach((to, from, next) => {
const isPublic = to.matched.some(record => record.meta.public);
const onlyWhenLoggedOut = to.matched.some(record => record.meta.onlyWhenLoggedOut);
const loggedIn = !!TokenService.getToken();
// if (!isPublic && !loggedIn) {
// return next({
// path:'/login',
// query: {redirect: to.fullPath} // Store the full path to redirect the user to after login
// });
// }
// Do not allow user to visit login page or register page if they are logged in
// if (loggedIn && onlyWhenLoggedOut) {
// return next('/')
// }
next();
});
// Bootstrap Analytics
// Set in .env
// https://github.com/MatteoGabriele/vue-analytics
if (process.env.GOOGLE_ANALYTICS) {
Vue.use(VueAnalytics, {
id: process.env.GOOGLE_ANALYTICS,
router,
autoTracking: {
page: process.env.NODE_ENV !== 'development'
}
})
}
export default router
+67
View File
@@ -0,0 +1,67 @@
/**
* Define all of your application routes here
* for more information on routes, see the
* official documentation https://router.vuejs.org/en/
*/
export default [
{
path: '/dashboard',
// Relative to /src/views
view: 'Dashboard'
},
{
path: '/my-info',
name: 'My Info',
view: 'MyInfo'
},
{
path: '/all-resualttest',
name: 'All Resualt Test',
view: 'AllResualtTest'
},
{
path: '/manage-users',
name: 'Manage Users',
view: 'ManageUsers'
},
{
path: '/test-creator',
name: 'Add New Test',
view: 'TestCreator'
},
{
path: '/manage-medical-center',
name: 'Manage Medical Center',
view: 'ManageMedicalCenter'
},
{
path: '/login',
name: 'Login',
view: 'Login',
meta: {
public: true, // Allow access to even if not logged in
onlyWhenLoggedOut: true
}
},
{
path: '/register',
name: 'Register',
view: 'Register'
},
{
path: '/submit-test-result',
name: 'Submit Test Result',
view: 'SubmitTestResult'
},
{
path: '/test-creator',
name: 'Test Creator',
view: 'TestCreator'
},
{
path: '/test',
name: 'Test',
view: 'Test'
}
]
+93
View File
@@ -0,0 +1,93 @@
import axios from 'axios'
import { TokenService } from './storage.service'
import store from '@/store'
const ApiService = {
init(baseURL) {
axios.defaults.baseURL = baseURL;
},
setHeader() {
axios.defaults.headers.common["Authorization"] = `Bearer ${TokenService.getToken()}`
},
removeHeader() {
axios.defaults.headers.common = {}
},
get(resource) {
return axios.get(resource)
},
post(resource, data) {
return axios.post(resource, data)
},
put(resource, data) {
return axios.put(resource, data)
},
delete(resource) {
return axios.delete(resource)
},
/**
* Perform a custom Axios request.
*
* data is an object containing the following properties:
* - method
* - url
* - data ... request payload
* - auth (optional)
* - username
* - password
**/
customRequest(data) {
return axios(data)
},
_401interceptor: null,
mount401Interceptor() {
this._401interceptor = axios.interceptors.response.use(
(response) => {
return response
},
async (error) => {
if (error.request.status == 401) {
if (error.config.url.includes('/o/token/')) {
// Refresh token has failed. Logout the user
store.dispatch('auth/logout')
throw error
} else {
// Refresh the access token
try{
await store.dispatch('auth/refreshToken')
// Retry the original request
return this.customRequest({
method: error.config.method,
url: error.config.url,
data: error.config.data
})
} catch (e) {
// Refresh has failed - reject the original request
throw error
}
}
}
// If error was not 401 just reject as is
throw error
}
)
},
unmount401Interceptor() {
// Eject the interceptor
axios.interceptors.response.eject(this._401interceptor)
}
}
export default ApiService
export { ApiService}
+37
View File
@@ -0,0 +1,37 @@
const TOKEN_KEY = 'access_token'
const REFRESH_TOKEN_KEY = 'refresh_token'
/**
* Manage the how Access Tokens are being stored and retreived from storage.
*
* Current implementation stores to localStorage. Local Storage should always be
* accessed through this instace.
**/
const TokenService = {
getToken() {
return localStorage.getItem(TOKEN_KEY)
},
saveToken(accessToken) {
localStorage.setItem(TOKEN_KEY, accessToken)
},
removeToken() {
localStorage.removeItem(TOKEN_KEY)
},
getRefreshToken() {
return localStorage.getItem(REFRESH_TOKEN_KEY)
},
saveRefreshToken(refreshToken) {
localStorage.setItem(REFRESH_TOKEN_KEY, refreshToken)
},
removeRefreshToken() {
localStorage.removeItem(REFRESH_TOKEN_KEY)
}
}
export { TokenService }
+104
View File
@@ -0,0 +1,104 @@
import ApiService from './api.service'
import { TokenService } from './storage.service'
class AuthenticationError extends Error {
constructor(errorCode, message) {
super(message)
this.name = this.constructor.name
this.message = message
this.errorCode = errorCode
}
}
const UserService = {
/**
* Login the user and store the access token to TokenService.
*
* @returns access_token
* @throws AuthenticationError
**/
login: async function(cell_number, password) {
const requestData = {
method: 'post',
url: "login",
data: {
cell_number,
password,
grant_type: 'password',
},
auth: {
username: process.env.VUE_APP_CLIENT_ID,
password: process.env.VUE_APP_CLIENT_SECRET
}
}
try {
const response = await ApiService.customRequest(requestData);
TokenService.saveToken(response.data.token);
TokenService.saveRefreshToken(response.data.token);
ApiService.setHeader();
// NOTE: We haven't covered this yet in our ApiService
// but don't worry about this just yet - I'll come back to it later
ApiService.mount401Interceptor();
return response.data.access_token;
} catch (error) {
throw new AuthenticationError(error.response.status, error.response.data.detail);
}
},
/**
* Refresh the access token.
**/
refreshToken: async function() {
const refreshToken = TokenService.getRefreshToken()
const requestData = {
method: 'post',
url: "login",
data: {
grant_type: 'refresh_token',
refresh_token: refreshToken
},
auth: {
username: process.env.VUE_APP_CLIENT_ID,
password: process.env.VUE_APP_CLIENT_SECRET
}
}
try {
const response = await ApiService.customRequest(requestData)
TokenService.saveToken(response.data.token)
TokenService.saveRefreshToken(response.data.token)
// Update the header in ApiService
ApiService.setHeader()
return response.data.access_token
} catch (error) {
throw new AuthenticationError(error.response.status, error.response.data.detail)
}
},
/**
* Logout the current user by removing the token from storage.
*
* Will also remove `Authorization Bearer <token>` header from future requests.
**/
logout() {
// Remove the token and remove Authorization header from Api Service as well
TokenService.removeToken()
TokenService.removeRefreshToken()
ApiService.removeHeader()
// NOTE: Again, we'll cover the 401 Interceptor a bit later.
ApiService.unmount401Interceptor()
}
}
export default UserService
export { UserService, AuthenticationError }
+3
View File
@@ -0,0 +1,3 @@
export * from './auth/api.service';
export * from './auth/storage.service';
export * from './auth/user.service';
+5
View File
@@ -0,0 +1,5 @@
// https://vuex.vuejs.org/en/actions.html
export default {
//
}
+5
View File
@@ -0,0 +1,5 @@
// https://vuex.vuejs.org/en/getters.html
export default {
//
}
+31
View File
@@ -0,0 +1,31 @@
/**
* Vuex
*
* @library
*
* https://vuex.vuejs.org/en/
*/
// Lib imports
import Vue from 'vue'
import Vuex from 'vuex'
// Store functionality
import actions from './actions'
import getters from './getters'
import modules from './modules'
import mutations from './mutations'
import state from './state'
Vue.use(Vuex)
// Create a new store
const store = new Vuex.Store({
actions,
getters,
modules,
mutations,
state
})
export default store
+8
View File
@@ -0,0 +1,8 @@
import { set, toggle } from '@/utils/vuex'
export default {
setDrawer: set('drawer'),
setImage: set('image'),
setColor: set('color'),
toggleDrawer: toggle('drawer')
}
+5
View File
@@ -0,0 +1,5 @@
export default {
drawer: null,
color: 'WM-CyanBlueGradient-BG',
// image: 'https://demos.creative-tim.com/vue-material-dashboard/img/sidebar-2.32103624.jpg'
}
+53
View File
@@ -0,0 +1,53 @@
import { UserService, AuthenticationError } from '@/services/auth/user.service'
import router from '@/router'
export default {
async login({ commit }, {cell_number, password}) {
commit('loginRequest');
try {
const token = await UserService.login(cell_number, password);
commit('loginSuccess', token)
// Redirect the user to the page he first tried to visit or to the home view
router.push(router.history.current.query.redirect || '/');
return true
} catch (e) {
if (e instanceof AuthenticationError) {
commit('loginError', {errorCode: e.errorCode, errorMessage: e.message})
}
return false
}
},
logout({ commit }) {
UserService.logout()
commit('logoutSuccess')
router.push('/login')
},
refreshToken({ commit, state }) {
// If this is the first time the refreshToken has been called, make a request
// otherwise return the same promise to the caller
if(!state.refreshTokenPromise) {
const p = UserService.refreshToken()
commit('refreshTokenPromise', p)
// Wait for the UserService.refreshToken() to resolve. On success set the token and clear promise
// Clear the promise on error as well.
p.then(
response => {
commit('refreshTokenPromise', null)
commit('loginSuccess', response)
},
error => {
commit('refreshTokenPromise', null)
}
)
}
return state.refreshTokenPromise
}
}
+17
View File
@@ -0,0 +1,17 @@
export default {
loggedIn: (state) => {
return state.accessToken ? true : false
},
authenticationErrorCode: (state) => {
return state.authenticationErrorCode
},
authenticationError: (state) => {
return state.authenticationError
},
authenticating: (state) => {
return state.authenticating
}
}
+27
View File
@@ -0,0 +1,27 @@
export default {
loginRequest(state) {
state.authenticating = true;
state.authenticationError = ''
state.authenticationErrorCode = 0
},
loginSuccess(state, accessToken) {
state.accessToken = accessToken
state.authenticating = false;
},
loginError(state, {errorCode, errorMessage}) {
state.authenticating = false
state.authenticationErrorCode = errorCode
state.authenticationError = errorMessage
},
logoutSuccess(state) {
state.accessToken = ''
},
refreshTokenPromise(state, promise) {
state.refreshTokenPromise = promise
}
}
+9
View File
@@ -0,0 +1,9 @@
import { TokenService } from '@/services/auth/storage.service'
export default {
authenticating: false,
accessToken: TokenService.getToken(),
authenticationErrorCode: 0,
authenticationError: '',
refreshTokenPromise: null // Holds the promise of the refresh token
}
+21
View File
@@ -0,0 +1,21 @@
// https://vuex.vuejs.org/en/modules.html
const requireModule = require.context('.', true, /\.js$/)
const modules = {}
requireModule.keys().forEach(fileName => {
if (fileName === './index.js') return
// Replace ./ and .js
const path = fileName.replace(/(\.\/|\.js)/g, '')
const [moduleName, imported] = path.split('/')
if (!modules[moduleName]) {
modules[moduleName] = {
namespaced: true
}
}
modules[moduleName][imported] = requireModule(fileName).default
})
export default modules
+5
View File
@@ -0,0 +1,5 @@
// https://vuex.vuejs.org/en/mutations.html
export default {
//
}
+5
View File
@@ -0,0 +1,5 @@
// https://vuex.vuejs.org/en/state.html
export default {
//
}
+71
View File
@@ -0,0 +1,71 @@
.theme--light.v-card.WM-TransparentCard {
background-color: transparent !important;
border-color: transparent !important;
box-shadow: none !important;
}
.headline {
letter-spacing : 7px !important;
}
.WM-Border-L-3x {
border-left: 3px solid;
}
.WM-OrangeGradient-BG {
background: linear-gradient(-245.99599235188236deg, rgba(252, 184, 162,1) -0.3020833333333286%,rgba(255, 236, 210,1) 93.03125%);
}
.WM-BlueGradient-BG {
background: linear-gradient(-246.25375448810587deg, rgba(213, 245, 253,1) 0.4518229166666856%,rgba(233, 255, 247,1) 92.79557291666667%)
}
.WM-CoffeeGradient-BG {
background : linear-gradient(-246.25375448810587deg, rgba(226, 210, 196,1) 0.2955729166666856%,rgba(250, 247, 245,1) 92.63932291666667%);
}
.WM-MuskGradient-BG {
background : linear-gradient(113.58893008880955deg, rgba(167, 204, 225,1) 4.927083333333334%,rgba(236, 246, 237,1) 97.84374999999999%);
}
.WM-CyanBlueGradient-BG {
background:linear-gradient(90deg, rgba(29,200,230,1) 20.5625%,rgba(29,200,229,1) 20.5625%,rgba(29,230,184,1) 80.5625%);
}
.WM-GreyGradient-BG {
background :linear-gradient(-248.2097473199551deg, rgba(220, 220, 220,1) 0.71484375%,rgba(246, 245, 245,1) 92.95442708333334%)
}
.WM-GreenGradient-BG {
background : linear-gradient(112.72013189013455deg, rgba(98, 185, 183,1) 4.927083333333334%,rgba(236, 246, 237,1) 97.84374999999999%)
}
.WM-YellowPinkGradient-BG {
background : linear-gradient(111.36820033167237deg, rgba(249, 231, 148,1) 4.927083333333334%,rgba(246, 190, 212,1) 97.84374999999999%)
}
.WM-PinkGradient-BG {
background: linear-gradient(to right, #ee9ca7, #ffdde1);
}
.WM-LightGray-color {
color: rgba(33,33,33,.7)
}
// .WM-Color-LightGrey {
// background-color : #F5F5F5;
// }
.WM-Outline-Btn {
padding: 8px;
background:transparent !important;
}
.container.grid-list-xl :not(:only-child) .layout:last-child {
margin : 0 !important;
}
.v-navigation-drawer .v-list .v-list-item .v-list__tile.v-list__tile--active {
-webkit-box-shadow: none !important;
box-shadow: none !important;
}
.v-btn.WM-NoShadow:not(.v-btn--depressed):not(.v-btn--flat) {
-webkit-box-shadow: none !important;
box-shadow: none !important;
}
@media screen and(max-width : 1536px) {
.WM-WidthScreen-SM {
flex-basis:35% !important;
max-width: 35% !important;
}
}
@media screen and(max-width : 1024px) {
.WM-WidthScreen-XS {
flex-basis:60% !important;
max-width: 60% !important;
}
}
+878
View File
@@ -0,0 +1,878 @@
/* --------------------------------------------------------
General :: Begin
-------------------------------------------------------- */
.En-Raleway {
font-family: 'Raleway', sans-serif;
}
.WM-SubText {
display: inline-block;
padding: 10px 25px 10px 25px;
color: #fff;
border-radius: 5px;
margin: 3px 0px 10px 0px;
}
.WM-SubText.SmallPad {
padding: 5px 15px 5px 15px;
}
.WM-SubText.XS {
padding: 3px 15px 1px 15px;
}
.WM-LetterSpacing-5 {
letter-spacing: 5px;
}
.WM-LetterSpacing-10 {
letter-spacing: 10px;
}
.WM-LetterSpacing-15 {
letter-spacing: 15px;
}
.wow {
visibility: hidden;
}
.RotateX {
transform: rotate(180deg);
webkit-transform: rotate(180deg);
}
.Material-Shoadow-SM {
box-shadow: 0 8px 10px rgba(0,0,0,0.30), 0 4px 3px rgba(0,0,0,0.22);
}
.InlineBlock {
display: inline-block;
}
.CubeTransition {
transition-property: all;
transition-duration: .5s;
transition-timing-function: cubic-bezier(0, 1, 0.5, 1);
}
.WhiteTheme .WM-SubText {
background-color: #fff !important;
color: #000;
}
.WhiteTheme .Notification {
background-color: transparent !important;
}
.WM-Height-90 {
height: 90px;
}
.WM-Height-110 {
height: 110px;
}
.WM-Height-130 {
height: 130px;
}
.WM-Width-220 {
width: 220px;
}
.WM-Width-Full {
width: 100%;
}
.WM-Height-Full {
height: 100%;
}
.WM-Absolute {
position: absolute;
}
.WM-Relative {
position: relative;
}
.WM-Block {
display: block;
}
.WM-InlineBlock {
display: inline-block;
}
[class^='WM-Hover'], [class*='WM-Hover'] {
transition: 0.2s;
}
/* --------------------------------------------------------
Align & Floats :: Begin
-------------------------------------------------------- */
.WM-Align-C {
text-align: center;
}
.WM-Align-R {
text-align: right;
}
.WM-Align-L {
text-align: left;
}
.WM-Float-R {
float: right;
}
.WM-Float-L {
float: left;
}
/* --------------------------------------------------------
Direction :: Begin
-------------------------------------------------------- */
.WM-RTL {
direction: rtl;
}
/* --------------------------------------------------------
Fonts :: Begin
-------------------------------------------------------- */
.WM-Font-12 {
font-size: 12px;
}
.WM-Font-14 {
font-size: 14px;
}
.WM-Font-16 {
font-size: 16px;
}
.WM-Font-18 {
font-size: 18px;
}
.WM-Font-20 {
font-size: 20px;
}
.WM-Font-22 {
font-size: 22px;
}
.WM-Font-24 {
font-size: 24px;
}
.WM-Font-30 {
font-size: 30px;
}
.WM-Font-36 {
font-size: 36px;
}
.WM-Font-48 {
font-size: 48px;
}
.WM-Font-52 {
font-size: 52px;
}
/* --------------------------------------------------------
Inputs :: Begin
-------------------------------------------------------- */
.WM-Input {
outline: none;
border: none;
}
.WM-TextArea {
outline: none;
border: none;
}
.WM-TextArea:focus, .WM-Input:focus {
border-color: transparent !important;
}
.WM-Input:focus::-webkit-input-placeholder {
color:transparent;
}
.WM-Input:focus::-webkit-input-placeholder { color:transparent; }
.WM-Input:focus:-moz-placeholder { color:transparent; }
.WM-Input:focus::-moz-placeholder { color:transparent; }
.WM-Input:focus:-ms-input-placeholder { color:transparent; }
.WM-TextArea:focus::-webkit-input-placeholder { color:transparent; }
.WM-TextArea:focus:-moz-placeholder { color:transparent; }
.WM-TextArea:focus::-moz-placeholder { color:transparent; }
.WM-TextArea:focus:-ms-input-placeholder { color:transparent; }
.WM-Input::-webkit-input-placeholder {
color: #555555;
}
.WM-Input:-moz-placeholder {
color: #555555;
}
.WM-Input::-moz-placeholder {
color: #555555;
}
.WM-Input:-ms-input-placeholder {
color: #555555;
}
.WM-TextArea::-webkit-input-placeholder {
color: #555555;
}
.WM-TextArea:-moz-placeholder {
color: #555555;
}
.WM-TextArea::-moz-placeholder {
color: #555555;
}
.WM-TextArea:-ms-input-placeholder {
color: #555555;
}
.WM-InputWrapper {
width: 100%;
position: relative;
border-bottom: 2px solid #d9d9d9;
padding-bottom: 0px;
margin-bottom: 35px;
}
.WM-InputLabel {
font-size: 15px;
color: #999999;
line-height: 1.5;
padding-left: 5px;
}
.WM-Input100 {
display: block;
width: 100%;
background: transparent;
font-size: 18px;
color: #555555;
line-height: 1.2;
}
.WM-Input100-Focus {
position: absolute;
display: block;
width: 100%;
height: 100%;
top: 0;
left: 0;
pointer-events: none;
}
.WM-Input100-Focus::before {
content: "";
display: block;
position: absolute;
bottom: -2px;
left: 0;
width: 0;
height: 2px;
-webkit-transition: all 0.4s;
-o-transition: all 0.4s;
-moz-transition: all 0.4s;
transition: all 0.4s;
background: #ff4b5a;
}
.WM-Input.WM-Red + .WM-Input100-Focus::before {
background: #ee3552;
}
.WM-Input.WM-Orange + .WM-Input100-Focus::before {
background: #FF6B57;
}
.WM-Input.WM-Purple + .WM-Input100-Focus::before {
background: #ac3773;
}
.WM-Input.WM-Cyan + .WM-Input100-Focus::before {
background: #32c5d2;
}
.WM-Input.WM-Green + .WM-Input100-Focus::before {
background: #0d7e00;
}
.WM-Input.WM-Blue + .WM-Input100-Focus::before {
background: #3498DB;
}
.WM-Input.WM-Black + .WM-Input100-Focus::before {
background: #000;
}
.WM-Input.WM-Input100 {
height: 40px;
}
.WM-InputWrapper input:disabled {
cursor: not-allowed;
}
.WM-TextArea.WM-Input100 {
min-height: 110px;
padding-top: 9px;
padding-bottom: 13px;
}
.WM-Input100:focus + .WM-Input100-Focus::before {
width: 100%;
}
.WM-Select {
background-color: transparent !important;
-webkit-appearance: none;
}
/* --------------------------------------------------------
Margins :: Begin
-------------------------------------------------------- */
.WM-Margin-T-5 {
margin-top: 5px;
}
.WM-Margin-T-15 {
margin-top: 15px;
}
.WM-Margin-T-20 {
margin-top: 20px;
}
.WM-Margin-T-45 {
margin-top: 45px;
}
.WM-Margin-T-55 {
margin-top: 55px;
}
.WM-Margin-T-100 {
margin-top: 100px;
}
.WM-Margin-L-10 {
margin-left: 10px;
}
.WM-Margin-L-0 {
margin-left: 0 !important;
}
.WM-Margin-R-10 {
margin-right: 10px;
}
.WM-Margin-R-40 {
margin-right: 40px;
}
.WM-Margin-BT-20 {
margin-top: 20px;
margin-bottom: 20px;
}
.WM-Margin-BT-5 {
margin-top: 5px;
margin-bottom: 5px;
}
.WM-Margin-B-10 {
margin-bottom: 10px;
}
.WM-Margin-B-30 {
margin-bottom: 30px;
}
.WM-Margin-RL-15 {
margin-left: 15px;
margin-right: 15px;
}
/* --------------------------------------------------------
Paddings :: Begin
-------------------------------------------------------- */
.WM-Padding-10 {
padding: 10px;
}
.WM-Padding-5 {
padding: 5px;
}
.WM-Padding-T-10 {
padding-top: 10px;
}
/* --------------------------------------------------------
Borders :: Begin
-------------------------------------------------------- */
.WM-Border {
border: 1px solid;
}
.WM-Border-2x {
border: 2px solid;
}
.WM-Border-R {
border-right: 1px solid;
}
.WM-Border-L {
border-left: 1px solid;
}
.WM-Border-T {
border-top: 1px solid;
}
.WM-Border-B {
border-bottom: 1px solid;
}
/* --------------------------------------------------------
Buttons :: Begin
-------------------------------------------------------- */
.WM-Btn {
outline: none !important;
border: none;
background: transparent;
display: -webkit-box;
display: -webkit-flex;
display: -moz-box;
display: -ms-flexbox;
display: flex;
justify-content: center;
align-items: center;
padding: 0 20px;
min-width: 160px;
height: 50px;
border-radius: 25px;
font-size: 16px;
color: #fff;
/* line-height: 1.2; */
line-height: 0;
-webkit-transition: all 0.4s;
-o-transition: all 0.4s;
-moz-transition: all 0.4s;
transition: all 0.4s;
}
.WM-Btn-Red {
background-color: #ee3552;
box-shadow: 0 10px 30px 0px rgba(255, 75, 90, 0.5);
-moz-box-shadow: 0 10px 30px 0px rgba(255, 75, 90, 0.5);
-webkit-box-shadow: 0 10px 30px 0px rgba(255, 75, 90, 0.5);
-o-box-shadow: 0 10px 30px 0px rgba(255, 75, 90, 0.5);
-ms-box-shadow: 0 10px 30px 0px rgba(255, 75, 90, 0.5);
}
.WM-Btn-Orange {
background-color: #FF6B57;
box-shadow: 0 10px 30px 0px rgba(255, 107, 87, 0.5);
-moz-box-shadow: 0 10px 30px 0px rgba(255, 107, 87, 0.5);
-webkit-box-shadow: 0 10px 30px 0px rgba(255, 107, 87, 0.5);
-o-box-shadow: 0 10px 30px 0px rgba(255, 107, 87, 0.5);
-ms-box-shadow: 0 10px 30px 0px rgba(255, 107, 87, 0.5);
}
.WM-Btn-Cyan {
background-color: #32c5d2;
box-shadow: 0 10px 30px 0px rgba(250, 197, 210, 0.5);
-moz-box-shadow: 0 10px 30px 0px rgba(50, 197, 210, 0.5);
-webkit-box-shadow: 0 10px 30px 0px rgba(50, 197, 210, 0.5);
-o-box-shadow: 0 10px 30px 0px rgba(50, 197, 210, 0.5);
-ms-box-shadow: 0 10px 30px 0px rgba(50, 197, 210, 0.5);
}
.WM-Btn-Yellow {
background-color: #ffd63a;
color: #000;
box-shadow: 0 10px 30px 0px rgba(234, 223, 131, 0.5);
-moz-box-shadow: 0 10px 30px 0px rgba(234, 223, 131, 0.5);
-webkit-box-shadow: 0 10px 30px 0px rgba(234, 223, 131, 0.5);
-o-box-shadow: 0 10px 30px 0px rgba(234, 223, 131, 0.5);
-ms-box-shadow: 0 10px 30px 0px rgba(234, 223, 131, 0.5);
}
.WM-Btn-Purple {
background-color: #ac3773;
color: #fff;
box-shadow: 0 10px 30px 0px rgba(172, 55, 115, 0.5);
-moz-box-shadow: 0 10px 30px 0px rgba(172, 55, 115, 0.5);
-webkit-box-shadow: 0 10px 30px 0px rgba(172, 55, 115, 0.5);
-o-box-shadow: 0 10px 30px 0px rgba(172, 55, 115, 0.5);
-ms-box-shadow: 0 10px 30px 0px rgba(172, 55, 115, 0.5);
}
.WM-Btn-Black {
background-color: #000;
box-shadow: 0 10px 30px 0px rgba(0, 0, 0, 0.5);
-moz-box-shadow: 0 10px 30px 0px rgba(0, 0, 0, 0.5);
-webkit-box-shadow: 0 10px 30px 0px rgba(0, 0, 0, 0.5);
-o-box-shadow: 0 10px 30px 0px rgba(0, 0, 0, 0.5);
-ms-box-shadow: 0 10px 30px 0px rgba(0, 0, 0, 0.5);
}
.WM-Btn-White {
background-color: #fff;
color: #000;
box-shadow: 0 10px 30px 0px rgba(255, 255, 255, 0.2);
-moz-box-shadow: 0 10px 30px 0px rgba(255, 255, 255, 0.2);
-webkit-box-shadow: 0 10px 30px 0px rgba(255, 255, 255, 0.2);
-o-box-shadow: 0 10px 30px 0px rgba(255, 255, 255, 0.2);
-ms-box-shadow: 0 10px 30px 0px rgba(255, 255, 255, 0.2);
}
.WM-Btn-Green {
background-color: #0d7e00;
box-shadow: 0 10px 30px 0px rgba(13, 126, 0, 0.5);
-moz-box-shadow: 0 10px 30px 0px rgba(13, 126, 0, 0.5);
-webkit-box-shadow: 0 10px 30px 0px rgba(13, 126, 0, 0.5);
-o-box-shadow: 0 10px 30px 0px rgba(13, 126, 0, 0.5);
-ms-box-shadow: 0 10px 30px 0px rgba(13, 126, 0, 0.5);
}
.WM-Btn-Blue {
background-color: #3498DB;
box-shadow: 0 10px 30px 0px rgba(52, 152, 219, 0.5);
-moz-box-shadow: 0 10px 30px 0px rgba(52, 152, 219, 0.5);
-webkit-box-shadow: 0 10px 30px 0px rgba(52, 152, 219, 0.5);
-o-box-shadow: 0 10px 30px 0px rgba(52, 152, 219, 0.5);
-ms-box-shadow: 0 10px 30px 0px rgba(52, 152, 219, 0.5);
}
.WM-Btn-Gray {
background-color: #797979;
box-shadow: 0 10px 30px 0px rgba(82, 104, 119, 0.5);
-moz-box-shadow: 0 10px 30px 0px rgba(82, 104, 119, 0.5);
-webkit-box-shadow: 0 10px 30px 0px rgba(82, 104, 119, 0.5);
-o-box-shadow: 0 10px 30px 0px rgba(82, 104, 119, 0.5);
-ms-box-shadow: 0 10px 30px 0px rgba(82, 104, 119, 0.5);
}
.WM-Btn i {
margin-left: 5px;
-webkit-transition: all 0.4s;
-o-transition: all 0.4s;
-moz-transition: all 0.4s;
transition: all 0.4s;
}
.WM-Btn:hover {
background-color: #333333;
cursor: pointer;
color: #fff;
box-shadow: 0 10px 30px 0px rgba(51, 51, 51, 0.5);
-moz-box-shadow: 0 10px 30px 0px rgba(51, 51, 51, 0.5);
-webkit-box-shadow: 0 10px 30px 0px rgba(51, 51, 51, 0.5);
-o-box-shadow: 0 10px 30px 0px rgba(51, 51, 51, 0.5);
-ms-box-shadow: 0 10px 30px 0px rgba(51, 51, 51, 0.5);
}
.WM-Btn-RedHover:hover {
background-color: #ee3552;
cursor: pointer;
color: #fff;
box-shadow: 0 10px 30px 0px rgba(255, 75, 90, 0.5);
-moz-box-shadow: 0 10px 30px 0px rgba(255, 75, 90, 0.5);
-webkit-box-shadow: 0 10px 30px 0px rgba(255, 75, 90, 0.5);
-o-box-shadow: 0 10px 30px 0px rgba(255, 75, 90, 0.5);
-ms-box-shadow: 0 10px 30px 0px rgba(255, 75, 90, 0.5);
}
.WM-Btn-SM {
min-width: 50px;
padding: 0 10px;
}
.WM-Btn-SM i {
margin-left: 0px;
}
.WM-Btn-XS {
min-width: 40px;
padding: 0 10px;
line-height: 1 !important;
height: 40px !important;
}
.WM-Btn-XS i {
margin-left: 0px;
}
/* .WM-Btn:hover i {
-webkit-transform: translateX(10px);
-moz-transform: translateX(10px);
-ms-transform: translateX(10px);
-o-transform: translateX(10px);
transform: translateX(10px);
} */
/* --------------------------------------------------------
Headers :: Begin
-------------------------------------------------------- */
.WM-SH-Container {
width: 100%;
position: relative;
text-align: right;
}
.WM-SH-TextFa {
margin-bottom: 15px;
font-size: 25px;
color: #000;
}
.WM-SH-Line {
width: 100%;
height: 1px;
background-color: #000;
overflow: hidden;
}
.WM-SH-TextEn-Container {
top: -12px;
position: relative;
display: inline-block;
z-index: 14;
overflow: visible;
padding: 0 0px;
background-color: #fff;
}
.WM-SH-TextEn {
background-color: #000;
padding: 5px 20px 5px 20px;
color: #fff;
z-index: 9;
overflow: visible;
font-size: 14px;
margin: 0px 0px 0px 20px;
border-radius: 3px;
}
.WM-SH-Description {
margin-top: -7px;
font-size: 14px;
}
/* --------------------------------------------------------
Links :: Begin
-------------------------------------------------------- */
.WM-Link {
display: inline-block;
color: #000;
direction: rtl;
text-decoration: none;
}
.WM-Link::after {
content: '';
display: block;
width: 0;
height: 2px;
background: #000;
transition: width .3s;
margin-top: 2px;
}
.WM-Link:hover::after, .WM-Link.WM-Selected::after {
width: 100%;
}
.WM-Link-Red:hover, .WM-Link-Red.WM-Selected {
color: #ee3552 !important;
}
.WM-Link-Red::after {
background: #ee3552;
}
.WM-Link-Green:hover, .WM-Link-Green.WM-Selected {
color: #32c5d2 !important;
}
.WM-Link-Green::after {
background: #32c5d2;
}
.WM-Link-Dark:hover, .WM-Link-Dark.WM-Selected {
color: #000 !important;
}
.WM-Link-Dark::after {
background: #000;
}
.WM-Link-Purple:hover, .WM-Link-Purple.WM-Selected {
color: #ac3773 !important;
}
.WM-Link-Purple::after {
background: #ac3773;
}
.WM-Link-Orange:hover, .WM-Link-Orange.WM-Selected {
color: #FF6B57 !important;
}
.WM-Link-Orange::after {
background: #FF6B57;
}
/* --------------------------------------------------------
Colors :: Begin
-------------------------------------------------------- */
/* ---------------------------AutoMatic Generate--------------------------- */
.WM-BG-Red, .WM-Link-Red::after, .WM-Input.WM-Red + .WM-Input100-Focus::before {
background-color: #ee3552;
color: #fff;
}
.WM-Color-Red, .WM-Link-Red:hover, .WM-Link-Red.WM-Selected, .WM-Link-Red.WM-Active {
color: #ee3552;
}
.WM-Border-Red, .WM-Hover-Red:hover {
border-color: #ee3552 !important;
}
.WM-BG-Orange, .WM-Link-Orange::after, .WM-Input.WM-Orange + .WM-Input100-Focus::before {
background-color: #FF6B57;
color: #fff;
}
.WM-Color-Orange, .WM-Link-Orange:hover, .WM-Link-Orange.WM-Selected, .WM-Link-Orange.WM-Active {
color: #FF6B57;
}
.WM-Border-Orange, .WM-Hover-Orange:hover {
border-color: #FF6B57 !important;
}
.WM-BG-Yellow, .WM-Link-Yellow::after, .WM-Input.WM-Yellow + .WM-Input100-Focus::before {
background-color: #ffd63a;
color: #fff;
}
.WM-Color-Yellow, .WM-Link-Yellow:hover, .WM-Link-Yellow.WM-Selected, .WM-Link-Yellow.WM-Active {
color: #ffd63a;
}
.WM-Border-Yellow, .WM-Hover-Yellow:hover {
border-color: #ffd63a;
}
.WM-BG-Gold, .WM-Link-Gold::after, .WM-Input.WM-Gold + .WM-Input100-Focus::before {
background-color: #ddcfbb;
color: #fff;
}
.WM-Color-Gold, .WM-Link-Gold:hover, .WM-Link-Gold.WM-Selected, .WM-Link-Gold.WM-Active {
color: #ddcfbb;
}
.WM-Border-Gold, .WM-Hover-Gold:hover {
border-color: #ddcfbb;
}
.WM-BG-Purple, .WM-Link-Purple::after, .WM-Input.WM-Purple + .WM-Input100-Focus::before {
background-color: #ac3773;
color: #fff;
}
.WM-Color-Purple, .WM-Link-Purple:hover, .WM-Link-Purple.WM-Selected, .WM-Link-Purple.WM-Active {
color: #ac3773;
}
.WM-Border-Purple, .WM-Hover-Purple:hover {
border-color: #ac3773 !important;
}
.WM-BG-Blue, .WM-Link-Blue::after, .WM-Input.WM-Blue + .WM-Input100-Focus::before {
background-color: #3498DB;
color: #fff;
}
.WM-Color-Blue, .WM-Link-Blue:hover, .WM-Link-Blue.WM-Selected, .WM-Link-Blue.WM-Active {
color: #3498DB;
}
.WM-Border-Blue, .WM-Hover-Blue:hover {
border-color: #3498DB !important;
}
.WM-BG-Green, .WM-Link-Green::after, .WM-Input.WM-Green + .WM-Input100-Focus::before {
background-color: #0d7e00;
color: #fff;
}
.WM-Color-Green, .WM-Link-Green:hover, .WM-Link-Green.WM-Selected, .WM-Link-Green.WM-Active {
color: #0d7e00;
}
.WM-Border-Green, .WM-Hover-Green:hover {
border-color: #0d7e00;
}
.WM-BG-Cyan, .WM-Link-Cyan::after, .WM-Input.WM-Cyan + .WM-Input100-Focus::before {
background-color: #32c5d2;
color: #fff;
}
.WM-Color-Cyan, .WM-Link-Cyan:hover, .WM-Link-Cyan.WM-Selected, .WM-Link-Cyan.WM-Active {
color: #32c5d2;
}
.WM-Border-Cyan, .WM-Hover-Cyan:hover {
border-color: #32c5d2;
}
.WM-BG-LightGray, .WM-Link-LightGray::after, .WM-Input.WM-LightGray + .WM-Input100-Focus::before {
background-color: #e6e6e6;
color: #fff;
}
.WM-Color-LightGray, .WM-Link-LightGray:hover, .WM-Link-LightGray.WM-Selected, .WM-Link-LightGray.WM-Active {
color: #e6e6e6;
}
.WM-Border-LightGray, .WM-Hover-LightGray:hover {
border-color: #e6e6e6;
}
.WM-BG-Gray, .WM-Link-Gray::after, .WM-Input.WM-Gray + .WM-Input100-Focus::before {
background-color: #797979;
color: #fff;
}
.WM-Color-Gray, .WM-Link-Gray:hover, .WM-Link-Gray.WM-Selected, .WM-Link-Gray.WM-Active {
color: #797979;
}
.WM-Border-Gray, .WM-Hover-Gray:hover {
border-color: #797979 !important;
}
.WM-BG-Dark, .WM-Link-Dark::after, .WM-Input.WM-Dark + .WM-Input100-Focus::before {
background-color: #2f353b;
color: #fff;
}
.WM-Color-Dark, .WM-Link-Dark:hover, .WM-Link-Dark.WM-Selected, .WM-Link-Dark.WM-Active {
color: #2f353b;
}
.WM-Border-Dark, .WM-Hover-Dark:hover {
border-color: #2f353b;
}
.WM-BG-Black, .WM-Link-Black::after, .WM-Input.WM-Black + .WM-Input100-Focus::before {
background-color: #2f353b;
color: #fff;
}
.WM-Color-Black, .WM-Link-Black:hover, .WM-Link-Black.WM-Selected, .WM-Link-Black.WM-Active {
color: #2f353b;
}
.WM-Border-Black, .WM-Hover-Black:hover {
border-color: #2f353b !important;
}
.WM-BG-White, .WM-Link-White::after, .WM-Input.WM-White + .WM-Input100-Focus::before {
background-color: #fff;
color: #fff;
}
.WM-Color-White, .WM-Link-White:hover, .WM-Link-White.WM-Selected, .WM-Link-White.WM-Active {
color: #fff;
}
.WM-Border-White, .WM-Hover-White:hover {
border-color: #fff;
}
/* ---------------------------AutoMatic Generate--------------------------- */
.WM-BG-LightGray, .WM-BG-Gold {
color: #000 !important;
}
/* --------------------------------------------------------
Hover :: Grayscale
-------------------------------------------------------- */
.WM-CategoryItem {
display:block;
overflow:hidden;
position:relative;
}
.WM-Hover-Grayscale {
cursor: pointer;
-webkit-transition: all 1s ease !important;
-moz-transition: all 1s ease !important;
-o-transition: all 1s ease !important;
-ms-transition: all 1s ease !important;
transition: all 1s ease !important;
}
.WM-Hover-Grayscale:hover {
-webkit-filter: grayscale(100%) !important;
}
+17
View File
@@ -0,0 +1,17 @@
@import "material-dashboard/mixins";
@import "material-dashboard/variables";
@import "material-dashboard/typography";
@import "material-dashboard/sidebar";
@import "material-dashboard/toolbar";
@import "material-dashboard/misc";
@import "material-dashboard/inputs";
@import "material-dashboard/footer";
@import "material-dashboard/cards";
@import "material-dashboard/tables";
@import "material-dashboard/tabs";
@import "material-dashboard/checkboxes";
@import "material-dashboard/tooltips";
@import "material-dashboard/buttons";
@import "material-dashboard/alerts";
@import "material-dashboard/fixed-plugin";
@import "material-dashboard/dropdown";
+48
View File
@@ -0,0 +1,48 @@
.v-alert {
.v-alert__dismissible .v-icon {
color: rgba($white, .5);
font-size: $font-size-default + 2;
}
.v-alert__icon.v-icon {
font-size: $font-size-alert-icon;
color: $white;
}
}
.v-snack {
.v-icon:not(:first-child) {
color: rgba($white, .5);
margin-left: $margin-general + 1;
}
.v-icon:first-child {
font-size: $font-size-alert-icon;
}
.v-snack__content {
padding: $padding-general $padding-general + 5;
height: auto;
}
.v-snack__wrapper {
border-radius: $border-radius-base + 1;
}
}
.v-snack .v-snack__wrapper,
.v-alert {
@include alert-shadow('info', lighten($brand-info, 5%));
@include alert-shadow('success', $brand-success);
@include alert-shadow('error', $brand-danger);
@include alert-shadow('warning', $brand-warning);
@include alert-shadow('purple', $brand-primary);
}
.v-snack {
@include notifications-color('info', lighten($brand-info, 5%));
@include notifications-color('success', $brand-success);
@include notifications-color('error', $brand-danger);
@include notifications-color('warning', $brand-warning);
@include notifications-color('purple', $brand-primary);
}
+101
View File
@@ -0,0 +1,101 @@
.v-btn {
margin: $margin-small 1px;
padding: $padding-small + 2 $padding-general + 15;
font-size: $font-size-small;
font-weight: $font-weight-base !important;
height: auto;
line-height: $line-height-base;
color: $white !important;
cursor: pointer;
border-radius: $border-radius-base;
&.v-btn--round,
&.v-btn--round:after {
border-radius: $btn-round-padding;
}
&.v-btn-facebook {
@include social-buttons-color($social-facebook);
}
&.v-btn-twitter {
@include social-buttons-color($social-twitter);
}
.v-icon--left {
margin-right: $btn-margin-icon;
}
.v-icon--right {
margin-left: $btn-margin-icon;
}
&.v-btn--large {
font-size: $font-size-general;
padding: $btn-y-large-padding $btn-x-large-padding !important;
line-height: $btn-large-line-height;
}
&.v-btn--small {
padding: $btn-y-small-padding $btn-x-small-padding !important;
font-size: $font-size-small - 1;
}
&.v-btn--icon {
width: $btn-icon-dim;
height: $btn-icon-dim;
line-height: $btn-icon-dim;
padding: 0;
&.v-btn--round {
border-radius: 50%;
}
}
&.success {
@include button-color($brand-success);
}
&.default {
@include button-color($gray-light);
}
&.primary {
@include button-color($brand-primary);
}
&.warning {
@include button-color($brand-warning);
}
&.info {
@include button-color($brand-info);
}
&.danger {
@include button-color($brand-danger);
}
.v-icon {
font-size: $btn-font-size-icon;
}
}
.v-btn--fixed {
border-radius: $border-radius-base + 3;
border-bottom-right-radius: 0;
border-top-right-radius: 0;
background-color: rgba($black, .3) !important;
right: 0;
padding: 0;
width: $btn-fixed-width;
.v-icon {
font-size: $btn-fixed-icon-size;
padding: $padding-small;
}
}
.v-btn--active:before,
.v-btn:focus:before,
.v-btn:hover:before {
background-color: transparent;
}
+167
View File
@@ -0,0 +1,167 @@
.v-card {
box-shadow: $card-shadow;
border-radius: $border-radius-base;
.category {
margin: 0;
}
.title {
margin-top: 0;
line-height: $line-height-base !important;
letter-spacing: 0 !important;
font-size: $font-size-h4 !important;
margin-bottom: $card-title-margin !important;
}
.v-divider {
border-top: $divider-border;
margin-left: $card-content-x-padding !important;
margin-right: $card-content-x-padding !important;
margin-bottom: 1px;
}
.v-offset {
top: $card-offset !important;
margin-bottom: $card-offset !important;
.category {
color: rgba($white, .62);
}
.v-card--material__header.v-card{
padding: $padding-general;
}
}
.v-card__actions {
margin: 0 $card-actions-y-margin 0;
padding: $padding-small 0 $padding-small;
line-height: $line-height-higher;
}
}
.v-card--material-chart.v-card {
&:not(.v-card--material__header) {
margin: $card-margin 0 !important;
}
.v-card--material__header{
border-radius: $border-radius-base + 3;
min-height: $card-chart-min-height;
padding: 0 !important;
.ct-label {
font-size: $font-size-chart-label;
}
}
.title {
margin-top: 0;
}
.category {
margin: 0 !important;
line-height: $line-height-higher;
color: $gray-light;
}
.v-card__text {
padding: $padding-general $card-content-x-padding;
line-height: $line-height-higher;
}
}
.v-card--material-stats.v-card:not(.v-card--material__header),
.v-card--material-chart.v-card:not(.v-card--material__header) {
margin: $card-margin 0 !important;
}
@include card-header-color('info', $brand-info, $cyan-400, $cyan-600);
@include card-header-color('red', $brand-danger, $red-400, $red-600);
@include card-header-color('green', $brand-success, $green-400, $green-600);
@include card-header-color('orange', $brand-warning, $orange-400, $orange-600);
@include card-header-color('purple', $brand-primary, $purple-400, $purple-600);
.v-card--material-stats.v-card {
.v-offset {
position: absolute;
.v-card {
max-width: $card-stats-offset;
max-height: $card-stats-offset;
line-height: $card-stats-offset;
padding: $padding-general !important;
i {
font-size: $font-size-big !important;
line-height: $line-height-high;
width: $card-stats-icons-dim;
height: $card-stats-icons-dim;
}
}
}
.v-card__text {
text-align: right;
padding-top: $padding-small;
position: relative;
}
.title {
margin: 0 !important;
line-height: $line-height-base !important;
letter-spacing: 0 !important;
font-size: $font-size-h3 !important;
small {
color: $gray-light;
font-size: $font-size-small-tag;
line-height: 1;
font-weight: $font-weight-base;
}
}
.v-card__actions {
i {
position: relative;
top: -1px;
font-size: $font-size-default + 2 !important;
}
.caption {
color: $gray-light;
}
}
}
.v-card-profile {
display: inline-block;
.v-offset {
top: unset !important;
margin-bottom: unset !important;
margin-top: $card-profile-avatar-pos;
}
.v-card__text .v-card__text {
padding-bottom: 0;
}
.v-card__text {
padding: $padding-general;
}
img {
@include shadow-big();
}
}
.v-card--flat {
background-color: transparent !important;
box-shadow: none;
.v-table {
background-color: transparent;
}
}
@@ -0,0 +1,3 @@
.mdi-checkbox-blank-outline:before {
-webkit-text-stroke: 1px $white;
}
+327
View File
@@ -0,0 +1,327 @@
$red-50: #ffebee !default;
$red-100: #ffcdd2 !default;
$red-200: #ef9a9a !default;
$red-300: #e57373 !default;
$red-400: #ef5350 !default;
$red-500: #f44336 !default;
$red-600: #e53935 !default;
$red-700: #d32f2f !default;
$red-800: #c62828 !default;
$red-900: #b71c1c !default;
$red-A100: #ff8a80 !default;
$red-A200: #ff5252 !default;
$red-A400: #ff1744 !default;
$red-A700: #d50000 !default;
$red: $red-500 !default;
$pink-50: #fce4ec !default;
$pink-100: #f8bbd0 !default;
$pink-200: #f48fb1 !default;
$pink-300: #f06292 !default;
$pink-400: #ec407a !default;
$pink-500: #e91e63 !default;
$pink-600: #d81b60 !default;
$pink-700: #c2185b !default;
$pink-800: #ad1457 !default;
$pink-900: #880e4f !default;
$pink-A100: #ff80ab !default;
$pink-A200: #ff4081 !default;
$pink-A400: #f50057 !default;
$pink-A700: #c51162 !default;
$pink: $pink-500 !default;
$purple-50: #f3e5f5 !default;
$purple-100: #e1bee7 !default;
$purple-200: #ce93d8 !default;
$purple-300: #ba68c8 !default;
$purple-400: #ab47bc !default;
$purple-500: #9c27b0 !default;
$purple-600: #8e24aa !default;
$purple-700: #7b1fa2 !default;
$purple-800: #6a1b9a !default;
$purple-900: #4a148c !default;
$purple-A100: #ea80fc !default;
$purple-A200: #e040fb !default;
$purple-A400: #d500f9 !default;
$purple-A700: #aa00ff !default;
$purple: $purple-500 !default;
$deep-purple-50: #ede7f6 !default;
$deep-purple-100: #d1c4e9 !default;
$deep-purple-200: #b39ddb !default;
$deep-purple-300: #9575cd !default;
$deep-purple-400: #7e57c2 !default;
$deep-purple-500: #673ab7 !default;
$deep-purple-600: #5e35b1 !default;
$deep-purple-700: #512da8 !default;
$deep-purple-800: #4527a0 !default;
$deep-purple-900: #311b92 !default;
$deep-purple-A100: #b388ff !default;
$deep-purple-A200: #7c4dff !default;
$deep-purple-A400: #651fff !default;
$deep-purple-A700: #6200ea !default;
$deep-purple: $deep-purple-500 !default;
$indigo-50: #e8eaf6 !default;
$indigo-100: #c5cae9 !default;
$indigo-200: #9fa8da !default;
$indigo-300: #7986cb !default;
$indigo-400: #5c6bc0 !default;
$indigo-500: #3f51b5 !default;
$indigo-600: #3949ab !default;
$indigo-700: #303f9f !default;
$indigo-800: #283593 !default;
$indigo-900: #1a237e !default;
$indigo-A100: #8c9eff !default;
$indigo-A200: #536dfe !default;
$indigo-A400: #3d5afe !default;
$indigo-A700: #304ffe !default;
$indigo: $indigo-500 !default;
$blue-50: #e3f2fd !default;
$blue-100: #bbdefb !default;
$blue-200: #90caf9 !default;
$blue-300: #64b5f6 !default;
$blue-400: #42a5f5 !default;
$blue-500: #2196f3 !default;
$blue-600: #1e88e5 !default;
$blue-700: #1976d2 !default;
$blue-800: #1565c0 !default;
$blue-900: #0d47a1 !default;
$blue-A100: #82b1ff !default;
$blue-A200: #448aff !default;
$blue-A400: #2979ff !default;
$blue-A700: #2962ff !default;
$blue: $blue-500 !default;
$light-blue-50: #e1f5fe !default;
$light-blue-100: #b3e5fc !default;
$light-blue-200: #81d4fa !default;
$light-blue-300: #4fc3f7 !default;
$light-blue-400: #29b6f6 !default;
$light-blue-500: #03a9f4 !default;
$light-blue-600: #039be5 !default;
$light-blue-700: #0288d1 !default;
$light-blue-800: #0277bd !default;
$light-blue-900: #01579b !default;
$light-blue-A100: #80d8ff !default;
$light-blue-A200: #40c4ff !default;
$light-blue-A400: #00b0ff !default;
$light-blue-A700: #0091ea !default;
$light-blue: $light-blue-500 !default;
$cyan-50: #e0f7fa !default;
$cyan-100: #b2ebf2 !default;
$cyan-200: #80deea !default;
$cyan-300: #4dd0e1 !default;
$cyan-400: #26c6da !default;
$cyan-500: #00bcd4 !default;
$cyan-600: #00acc1 !default;
$cyan-700: #0097a7 !default;
$cyan-800: #00838f !default;
$cyan-900: #006064 !default;
$cyan-A100: #84ffff !default;
$cyan-A200: #18ffff !default;
$cyan-A400: #00e5ff !default;
$cyan-A700: #00b8d4 !default;
$cyan: $cyan-500 !default;
$teal-50: #e0f2f1 !default;
$teal-100: #b2dfdb !default;
$teal-200: #80cbc4 !default;
$teal-300: #4db6ac !default;
$teal-400: #26a69a !default;
$teal-500: #009688 !default;
$teal-600: #00897b !default;
$teal-700: #00796b !default;
$teal-800: #00695c !default;
$teal-900: #004d40 !default;
$teal-A100: #a7ffeb !default;
$teal-A200: #64ffda !default;
$teal-A400: #1de9b6 !default;
$teal-A700: #00bfa5 !default;
$teal: $teal-500 !default;
$green-50: #e8f5e9 !default;
$green-100: #c8e6c9 !default;
$green-200: #a5d6a7 !default;
$green-300: #81c784 !default;
$green-400: #66bb6a !default;
$green-500: #4caf50 !default;
$green-600: #43a047 !default;
$green-700: #388e3c !default;
$green-800: #2e7d32 !default;
$green-900: #1b5e20 !default;
$green-A100: #b9f6ca !default;
$green-A200: #69f0ae !default;
$green-A400: #00e676 !default;
$green-A700: #00c853 !default;
$green: $green-500 !default;
$light-green-50: #f1f8e9 !default;
$light-green-100: #dcedc8 !default;
$light-green-200: #c5e1a5 !default;
$light-green-300: #aed581 !default;
$light-green-400: #9ccc65 !default;
$light-green-500: #8bc34a !default;
$light-green-600: #7cb342 !default;
$light-green-700: #689f38 !default;
$light-green-800: #558b2f !default;
$light-green-900: #33691e !default;
$light-green-A100: #ccff90 !default;
$light-green-A200: #b2ff59 !default;
$light-green-A400: #76ff03 !default;
$light-green-A700: #64dd17 !default;
$light-green: $light-green-500 !default;
$lime-50: #f9fbe7 !default;
$lime-100: #f0f4c3 !default;
$lime-200: #e6ee9c !default;
$lime-300: #dce775 !default;
$lime-400: #d4e157 !default;
$lime-500: #cddc39 !default;
$lime-600: #c0ca33 !default;
$lime-700: #afb42b !default;
$lime-800: #9e9d24 !default;
$lime-900: #827717 !default;
$lime-A100: #f4ff81 !default;
$lime-A200: #eeff41 !default;
$lime-A400: #c6ff00 !default;
$lime-A700: #aeea00 !default;
$lime: $lime-500 !default;
$yellow-50: #fffde7 !default;
$yellow-100: #fff9c4 !default;
$yellow-200: #fff59d !default;
$yellow-300: #fff176 !default;
$yellow-400: #ffee58 !default;
$yellow-500: #fec60a !default;
$yellow-600: #fdd835 !default;
$yellow-700: #fbc02d !default;
$yellow-800: #f9a825 !default;
$yellow-900: #f57f17 !default;
$yellow-A100: #ffff8d !default;
$yellow-A200: #ffff00 !default;
$yellow-A400: #ffea00 !default;
$yellow-A700: #ffd600 !default;
$yellow: $yellow-700 !default;
$amber-50: #fff8e1 !default;
$amber-100: #ffecb3 !default;
$amber-200: #ffe082 !default;
$amber-300: #ffd54f !default;
$amber-400: #ffca28 !default;
$amber-500: #ffc107 !default;
$amber-600: #ffb300 !default;
$amber-700: #ffa000 !default;
$amber-800: #ff8f00 !default;
$amber-900: #ff6f00 !default;
$amber-A100: #ffe57f !default;
$amber-A200: #ffd740 !default;
$amber-A400: #ffc400 !default;
$amber-A700: #ffab00 !default;
$amber: $amber-500 !default;
$orange-50: #fff3e0 !default;
$orange-100: #ffe0b2 !default;
$orange-200: #ffcc80 !default;
$orange-300: #ffb74d !default;
$orange-400: #ffa726 !default;
$orange-500: #ff9800 !default;
$orange-600: #fb8c00 !default;
$orange-700: #f57c00 !default;
$orange-800: #ef6c00 !default;
$orange-900: #e65100 !default;
$orange-A100: #ffd180 !default;
$orange-A200: #ffab40 !default;
$orange-A400: #ff9100 !default;
$orange-A700: #ff6d00 !default;
$orange: $orange-500 !default;
$deep-orange-50: #fbe9e7 !default;
$deep-orange-100: #ffccbc !default;
$deep-orange-200: #ffab91 !default;
$deep-orange-300: #ff8a65 !default;
$deep-orange-400: #ff7043 !default;
$deep-orange-500: #ff5722 !default;
$deep-orange-600: #f4511e !default;
$deep-orange-700: #e64a19 !default;
$deep-orange-800: #d84315 !default;
$deep-orange-900: #bf360c !default;
$deep-orange-A100: #ff9e80 !default;
$deep-orange-A200: #ff6e40 !default;
$deep-orange-A400: #ff3d00 !default;
$deep-orange-A700: #dd2c00 !default;
$deep-orange: $deep-orange-500 !default;
$brown-50: #efebe9 !default;
$brown-100: #d7ccc8 !default;
$brown-200: #bcaaa4 !default;
$brown-300: #a1887f !default;
$brown-400: #8d6e63 !default;
$brown-500: #795548 !default;
$brown-600: #6d4c41 !default;
$brown-700: #5d4037 !default;
$brown-800: #4e342e !default;
$brown-900: #3e2723 !default;
$brown-A100: #d7ccc8 !default;
$brown-A200: #bcaaa4 !default;
$brown-A400: #8d6e63 !default;
$brown-A700: #5d4037 !default;
$brown: $brown-500 !default;
$grey-50: #fafafa !default;
$grey-100: #f5f5f5 !default;
$grey-200: #eeeeee !default;
$grey-300: #e0e0e0 !default;
$grey-400: #bdbdbd !default;
$grey-500: #9e9e9e; $rgb-grey-500: "158, 158, 158" !default;
$grey-600: #757575 !default;
$grey-700: #616161 !default;
$grey-800: #424242 !default;
$grey-900: #212121 !default;
$grey-A100: #f5f5f5 !default;
$grey-A200: #eeeeee !default;
$grey-A400: #bdbdbd !default;
$grey-A700: #616161 !default;
$grey: $grey-500 !default;
$blue-grey-50: #eceff1 !default;
$blue-grey-100: #cfd8dc !default;
$blue-grey-200: #b0bec5 !default;
$blue-grey-300: #90a4ae !default;
$blue-grey-400: #78909c !default;
$blue-grey-500: #607d8b !default;
$blue-grey-600: #546e7a !default;
$blue-grey-700: #455a64 !default;
$blue-grey-800: #37474f !default;
$blue-grey-900: #263238 !default;
$blue-grey-A100: #cfd8dc !default;
$blue-grey-A200: #b0bec5 !default;
$blue-grey-A400: #78909c !default;
$blue-grey-A700: #455a64 !default;
$blue-grey: $blue-grey-500 !default;
$black: #000000; $rgb-black: "0,0,0" !default;
$white: #ffffff; $rgb-white: "255,255,255" !default;
$Gradient-BlueCyan : linear-gradient(90deg, rgba(29,200,230,1) 20.5625%,rgba(29,200,229,1) 20.5625%,rgba(29,230,184,1) 80.5625%) !default;
@@ -0,0 +1,31 @@
.dropdown-menu {
border-radius: $border-radius-base;
.v-list__tile {
border-radius: $border-radius-base - 1;
color: #333 !important;
display: flex;
font-size: $font-size-dropdown;
font-weight: $font-weight-base;
margin: 0 $margin-small - 5;
padding: $padding-small 1.5rem;
text-transform: none;
@include transition-except-props(.15s linear, color, background-color, box-shadow 0ms);
white-space: nowrap;
.v-list__tile__title {
transition: none;
}
&:hover,
&:focus,
&:active {
@include dropdown-menu-color($brand-primary);
&,
.v-list__tile__title {
color: $white !important;
}
}
}
}
@@ -0,0 +1,46 @@
.v-menu__content {
border-radius: $border-radius-dropdown;
box-shadow: $box-shadow-general;
.sidebar-filter {
height: 30px;
line-height: 25px;
font-size: $font-size-small !important;
font-weight: $font-weight-bolder + 100;
color: $black-color;
}
.v-responsive {
max-height: 100px;
border-radius: $border-radius-dropdown;
max-width: 50px;
margin: 0 auto;
}
.container.grid-list-xl .layout .flex {
padding: $padding-small - 5;
}
.v-avatar,
.v-responsive {
border: 3px solid $white;
transition: all .34s;
&:not(:last-child) {
margin-right: 5px;
}
&.image-active,
&.color-active {
border-color: $brand-info;
}
}
.v-avatar {
@include fixed-plugin-colors('primary', $brand-primary);
@include fixed-plugin-colors('info', $brand-info);
@include fixed-plugin-colors('danger', $brand-danger);
@include fixed-plugin-colors('warning', $brand-warning);
@include fixed-plugin-colors('success', $brand-success);
}
}
+63
View File
@@ -0,0 +1,63 @@
.theme--light.v-footer {
border-top: $footer-border-top;
background: transparent;
padding: $padding-general $padding-x-footer;
}
.v-footer {
.footer-links {
font-weight: $font-weight-bolder;
text-decoration: none;
text-transform: uppercase;
font-size: $font-size-small;
padding: $padding-general;
line-height: $line-height-footer-items;
&:hover,
&:focus,
&:active {
color: $brand-primary !important;
}
}
.copyright {
color: $black-color;
a {
&,
&:hover,
&:focus,
&:active {
color: $brand-primary;
}
}
}
}
@media all and (max-width: 991px) {
.v-footer {
height: auto !important;
flex-direction: column;
}
.footer-items,
.copyright {
width: 100%;
}
.copyright {
text-align: right;
}
}
@media all and (max-width: 550px) {
.footer-items,
.copyright {
width: unset;
text-align: center;
}
.copyright {
margin-top: $margin-small;
}
}
+33
View File
@@ -0,0 +1,33 @@
.theme--light.v-text-field .v-input__slot:before {
border-color: $input-color !important;
}
.input--is-focused .v-input__control .v-input__slot:after{
border-color: red !important;
}
.v-text-field__slot {
input {
@include material-placeholder{
color: $input-color;
};
}
.v-label {
color: $label-color !important;
font-size: $font-size-default;
font-weight: $font-weight-base;
}
}
.theme--light.v-input:not(.v-input--is-disabled) input,
.theme--light.v-input:not(.v-input--is-disabled) textarea {
color: $black-color;
font-size: $font-size-default;
}
@include inputs-color($brand-primary, 'purple');
@include inputs-color($brand-warning, 'orange');
@include inputs-color($brand-info, 'info');
@include inputs-color($brand-danger, 'danger');
@include inputs-color($brand-success, 'success');
@include inputs-color($brand-success, 'primary');
+54
View File
@@ -0,0 +1,54 @@
.theme--light.application {
background: $body-color;
}
a {
text-transform: none;
text-decoration: none;
}
html {
font-size: $font-size-general + 2!important;
}
.category {
font-size: $font-size-general;
}
.theme--light.v-icon {
color: $gray-light;
}
blockquote {
display: block;
margin-block-start: 1em;
margin-block-end: 1em;
margin-inline-start: 40px;
margin-inline-end: 40px;
p {
font-style: italic;
color: $blockquote-color;
font-weight: $font-weight-bolder;
}
small {
font-size: 70%;
}
}
b,
strong {
font-size: $font-size-small;
font-weight: $font-weight-bolder;
}
.v-list--three-line .v-list__tile {
height: auto;
}
@include drawer-active-colors('primary', $brand-primary);
@include drawer-active-colors('success', $brand-success);
@include drawer-active-colors('danger', $brand-danger);
@include drawer-active-colors('info', $brand-info);
@include drawer-active-colors('warning', $brand-warning);
+162
View File
@@ -0,0 +1,162 @@
@mixin shadow-big(){
box-shadow: 0 10px 30px -12px rgba(0, 0, 0, $mdb-shadow-key-penumbra-opacity * 3),
0 4px 25px 0px rgba(0, 0, 0, $mdb-shadow-ambient-shadow-opacity),
0 8px 10px -5px rgba(0, 0, 0, $mdb-shadow-key-umbra-opacity);
}
@mixin shadow-2dp-color($color){
box-shadow: 0 2px 2px 0 rgba($color, $mdb-shadow-key-penumbra-opacity),
0 3px 1px -2px rgba($color, $mdb-shadow-key-umbra-opacity),
0 1px 5px 0 rgba($color, $mdb-shadow-ambient-shadow-opacity) !important;
}
@mixin button-shadow-color($color){
box-shadow: 0 14px 26px -12px rgba($color, $mdb-shadow-key-penumbra-opacity * 3),
0 4px 23px 0px rgba(0,0,0, $mdb-shadow-ambient-shadow-opacity),
0 8px 10px -5px rgba($color, $mdb-shadow-key-umbra-opacity) !important;
}
@mixin shadow-8dp(){
box-shadow: 0 8px 10px 1px rgba(0, 0, 0, $mdb-shadow-key-penumbra-opacity),
0 3px 14px 2px rgba(0, 0, 0, $mdb-shadow-ambient-shadow-opacity),
0 5px 5px -3px rgba(0, 0, 0, $mdb-shadow-key-umbra-opacity);
}
@mixin shadow-big-color($color){
box-shadow: 0 12px 20px -10px rgba($color, $mdb-shadow-key-penumbra-opacity * 2),
0 4px 20px 0px rgba(0,0,0, $mdb-shadow-ambient-shadow-opacity),
0 7px 8px -5px rgba($color, $mdb-shadow-key-umbra-opacity) !important;
}
@mixin material-placeholder() {
&::-moz-placeholder {@content; } // Firefox
&:-ms-input-placeholder {@content; } // Internet Explorer 10+
&::-webkit-input-placeholder {@content; } // Safari and Chrome
}
@mixin inputs-color($color, $color-name) {
.v-text-field.#{$color-name}-input > .v-input__control > .v-input__slot:after {
border-color: $color;
}
}
@mixin drawer-active-colors($color-name, $color) {
.v-navigation-drawer .v-list .v-list-item .v-list__tile.v-list__tile--active.#{$color-name} {
background-color: $color !important;
@include shadow-big-color($color);
}
}
@mixin toolbar-colors($color-name, $color) {
&.#{$color-name} {
background-color: $color !important;
@include shadow-big-color($color);
}
}
@mixin fixed-plugin-colors($color-name, $color) {
&.color-#{$color-name}{
background-color: $color;
}
}
@mixin notifications-color($color-name, $color) {
.v-snack__wrapper.#{$color-name} {
background-color: $color !important;
border-color: $color !important
}
}
@mixin card-header-color($color, $shadow-color, $color-400, $color-600) {
.v-card.#{$color} {
background: linear-gradient(60deg, $color-400, $color-600) !important;
@include shadow-big-color($shadow-color);
}
}
@mixin alert-shadow($color-name, $shadow-color) {
&.#{$color-name} {
@include shadow-big-color($shadow-color);
}
}
@mixin transition-except-props($property...){
transition: all $property;
}
@mixin dropdown-menu-color($color) {
background-color: $color !important;
@include button-shadow-color($color);
}
@mixin button-color($color) {
background-color: $color !important;
@include shadow-2dp-color($color);
&:focus,
&:active,
&:hover{
// remove this line if you want black shadows
@include button-shadow-color($color);
background-color: darken($color, 3%) !important;
}
&.v-btn--simple{
&,
&:hover,
&:focus,
&:active,
&.active,
&:active:focus,
&:active:hover,
&.active:focus,
&.active:hover{
background-color: transparent !important;
color: $color !important;
box-shadow: none !important;
i{
color: $color !important;
}
}
}
}
@mixin social-buttons-color ($color){
background-color: $color !important;
color: $white;
@include shadow-2dp-color($color);
&:hover,
&:focus,
&:active,
&.active,
&:active:focus,
&:active:hover,
&.active:focus,
&.active:hover{
background-color: $color !important;
color: $white;
@include button-shadow-color($color);
}
&.v-btn--simple{
&,
&:hover,
&:focus,
&:active,
&.active,
&:active:focus,
&:active:hover,
&.active:focus,
&.active:hover{
color: $color !important;
background-color: transparent;
box-shadow: none;
i{
color: $color !important;
}
}
}
}
@@ -0,0 +1,86 @@
.v-navigation-drawer {
@include shadow-big();
.v-list {
background: $sidebar-bg;
padding: 0;
.v-list-item {
&:not(:nth-child(3)){
margin: $margin-small $margin-general 0;
}
&:nth-child(3) {
margin: 0 $margin-general;
}
& > .v-list__tile {
padding: $padding-small $padding-general;
&:hover,
&:focus,
&:active {
background-color: $list-item-hover;
}
.v-list__tile__title {
font-size: $font-size-general !important;
font-weight: $font-weight-lighter;
padding: 0;
}
}
.v-list__tile__action {
margin-right: $margin-general;
min-width: unset;
i {
width: $icon-width;
}
}
.v-list__tile:not(.v-list__tile--active) .v-list__tile__action i {
opacity: $list-item-icon-opacity;
}
.v-list__tile.v-list__tile--active {
// @include shadow-big-color($brand-success);
}
}
.v-list__tile--avatar {
height: unset;
padding: $padding-logo 0;
}
.v-list__tile__avatar {
margin-left: $margin-list-left;
margin-right: $margin-list-right;
min-width: unset;
}
.v-list__tile__title {
line-height: $line-height;
padding: $padding-avatar-title 0;
height: unset;
font-size: $font-size-avatar-title !important;
font-weight: $font-weight-base;
letter-spacing: unset !important;
}
.v-divider {
border-color: $black-opacity-3;
margin: $divider-margins auto $divider-margins + 25;
width: $divider-width;
}
.v-image__image--contain {
top: $top-dim;
}
.v-avatar {
@include shadow-big;
}
}
}
+33
View File
@@ -0,0 +1,33 @@
.theme--light.v-table tbody tr:not(:last-child),
.theme--light.v-table thead tr:first-child {
border-bottom: 1px solid $table-border-color!important;
}
table.v-table thead tr {
height: $table-head-height;
background: $Gradient-BlueCyan !important;
}
.theme--light.v-table tbody tr:hover:not(.v-datatable__expand-row) {
background: $table-hover-color !important;
}
table.v-table tbody td {
font-size: $font-size-general;
font-weight: $font-weight-lighter;
}
table.v-table tbody td:first-child, table.v-table tbody td:not(:first-child),
table.v-table tbody th:first-child, table.v-table tbody th:not(:first-child),
table.v-table thead td:first-child, table.v-table thead td:not(:first-child),
table.v-table thead th:first-child, table.v-table thead th:not(:first-child) {
padding: $padding-small + 2 $tabs-text-box-padding;
}
.v-datatable__progress {
display: none;
}
table thead tr th span{
font-size: 1.0625rem !important;
}
+36
View File
@@ -0,0 +1,36 @@
.card-tabs {
.v-divider {
margin-left: 0 !important;
margin-right: 0 !important;
}
.flex {
padding: 0 !important;
}
.v-tabs__item {
border-radius: $border-radius-base;
}
.v-tabs__slider-wrapper .white{
background-color: $tabs-active-line !important;
border-color: $tabs-active-line !important
}
.v-tabs__slider {
height: 1px;
}
.v-list__tile__title {
font-size: $font-size-default;
font-weight: $font-weight-lighter;
padding: 0 $tabs-text-box-padding;
overflow: visible;
white-space: inherit;
height: auto;
}
.v-list .v-input, .v-list .v-input__slot {
justify-content: center;
}
}
@@ -0,0 +1,76 @@
.v-toolbar {
min-height: $toolbar-min-height;
border-radius: $border-radius-base;
margin-bottom: $margin-general;
&:not(.v-toolbar--fixed) .v-toolbar__content {
margin-left: $toolbar-margin-left;
}
@include toolbar-colors('bg-danger', $brand-danger);
@include toolbar-colors('bg-warning', $brand-warning);
@include toolbar-colors('bg-primary', $brand-primary);
@include toolbar-colors('bg-info', $brand-info);
@include toolbar-colors('bg-success', $brand-success);
@include toolbar-colors('bg-default', $gray-light);
&[class*="bg-"] {
.v-toolbar__title,
.v-btn__content,
.v-ripple__container {
color: $white !important;
}
}
.v-toolbar__content {
min-height: $toolbar-min-height;
padding-bottom: $padding-small;
padding-top: $padding-small;
.v-toolbar__title {
font-size: $font-size-toolbar-title;
letter-spacing: unset;
color: $black-color;
}
.v-toolbar__items {
& > div {
padding: 0 !important;
}
.toolbar-items{
align-items: center;
border-radius: $border-radius-base;
display: flex;
min-height: $list-item-height;
padding: $padding-small $padding-general;
.v-badge__badge {
border: $badge-border !important;
font-size: $font-size-mini;
height: $badge-dimension;
line-height: normal;
right: -7px;
top: -12px;
width: $badge-dimension;
font-weight: $font-weight-base;
}
.v-icon {
font-size: $font-size-toolbar-items;
}
}
.v-input {
margin: 0 !important;
padding: 0;
}
}
}
}
@media all and (max-width: 990px) {
.v-toolbar:not(.v-toolbar--fixed) .v-toolbar__content {
margin-left: 0;
}
}
@@ -0,0 +1,55 @@
.v-tooltip__content {
background: $white;
padding: $padding-small $padding-general;
min-width: $tooltip-min-width;
max-width: $tooltip-max-width;
color: $gray !important;
font-size: $font-size-small;
font-weight: $font-weight-base;
@include shadow-8dp();
text-align: center;
&:after{
position: absolute;
bottom: -$tooltip-border;
height: 0;
left: 0;
right: 0;
margin-left: auto;
margin-right: auto;
width: $tooltip-border;
vertical-align: $tooltip-arrow-align;
content: "";
}
&.top:after {
border-top: $tooltip-border solid $white;
border-right: $tooltip-border solid transparent;
border-bottom: 0;
border-left: $tooltip-border solid transparent;
}
&.bottom:after{
top: -$tooltip-border;
border-top: 0;
border-right: $tooltip-border solid transparent;
border-bottom: $tooltip-border solid $white;
border-left: $tooltip-border solid transparent;
}
&.left:after{
margin-right: 0;
right: -$tooltip-border;
top: $tooltip-top-border-pos;
border-top: $tooltip-border solid transparent;
border-bottom: $tooltip-border solid transparent;
border-left: $tooltip-border solid $white;
}
&.right:after{
margin-left: 0;
left: -$tooltip-border;
top: $tooltip-top-border-pos;
border-top: $tooltip-border solid transparent;
border-bottom: $tooltip-border solid transparent;
border-right: $tooltip-border solid $white;
}
}
@@ -0,0 +1,82 @@
body, h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4 {
font-family: $font-family-sans-serif !important;
font-weight: $font-weight-lighter !important;
line-height: $line-height-base !important;
}
h1,h2,h3,.h1,.h2,.h3{
margin-top: $margin-general + 5;
margin-bottom: $margin-small;
}
h4,h5,h6,.h4,.h5,.h6{
margin-top: $margin-small;
margin-bottom: $margin-small;
}
h1, .h1 {
font-size: $font-size-h1 !important;
line-height: 1.15em !important;
}
h2, .h2{
font-size: $font-size-h2 !important;
line-height: $line-height-base !important;
}
h3, .h3{
font-size: $font-size-h3 !important;
line-height: 1.4em !important;
}
h4, .h4{
font-size: $font-size-h4 !important;
line-height: $line-height-base !important;
}
h5, .h5 {
font-size: $font-size-h5 !important;
line-height: 1.55em !important;
margin-bottom: $margin-general;
}
h6, .h6{
font-size: $font-size-h6 !important;
text-transform: uppercase;
font-weight: $font-weight-bolder;
}
p{
font-size: $font-paragraph !important;
margin: 0 0 $margin-small;
}
h2.title{
margin-bottom: $margin-general * 2;
}
.description,
.card-description,
.footer-big p{
color: $gray-light;
}
.text-warning {
color: $brand-warning !important;
}
.text-primary {
color: $brand-primary !important;
}
.text-danger {
color: $brand-danger !important;
}
.text-success {
color: $brand-success !important;
}
.text-info {
color: $brand-info !important;
}
.text-gray{
color: $gray-light !important;
}
.text-pink {
color: $pink-500 !important;
}
.text-white {
color: $white !important;
}
@@ -0,0 +1,170 @@
// Importing All Material Design Colors
@import "./colors";
// Brand Colors
$brand-primary: $purple !default;
$brand-success: $green !default;
$brand-danger: $red !default;
$brand-warning: $orange !default;
$brand-info: $cyan !default;
// Paddings
$padding-logo: 15px !default;
$padding-avatar-title: 5px !default;
$padding-x-footer: 24px !default;
// Line Height
$line-height: 30px !default;
$line-height-base: 1.5em !default;
$line-height-footer-items: 1.8 !default;
$line-height-higher: 22px !default;
$line-height-high: 56px !default;
// Sidebar List Items Icons
$icon-width: $line-height;
// Sidebar List Items
$padding-small: 10px !default;
$padding-general: 15px !default;
$margin-general: $padding-general;
$margin-small: $padding-small;
$font-size-general: 14px !default;
$list-item-hover: rgba(200, 200, 200, .2) !default;
$list-item-icon-opacity: .8 !default;
$list-item-height: 48px !default;
$badge-border: 1px solid $white !default;
$badge-dimension: 20px !default;
// Border Radius
$border-radius-base: 3px !default;
// Sidebar Avatar Margins
$margin-list-right: 11px !default;
$margin-list-left: 25px !default;
// Sidebar Divider
$divider-width: calc(100% - 30px) !default;
$divider-margins: -1px !default;
$divider-border: 1px solid #eee;
// Sidebar Background
$sidebar-bg: rgba(27, 27, 27, .74) !default;
// Font size
$font-size-mini: 9px !default;
$font-size-small: 12px !default;
$font-size-default: 14px !default;
$font-size-avatar-title: 18px !default;
$font-size-alert-icon: 30px !default;
$font-size-big: 36px !default;
$font-size-small-tag: 65% !default;
$font-size-toolbar-title: $font-size-avatar-title;
$font-size-toolbar-items: 20px !default;
$font-size-h1: 3.3125rem;
$font-size-h2: 2.25rem !default;
$font-size-h3: 1.5625rem;
$font-size-h4: 1.125rem !default;
$font-size-h5: 1.0625rem !default;
$font-size-h6: 0.75rem !default;
$font-paragraph: $font-size-default !default;
$font-size-chart-label: .730rem !default;
// Font Weight
$font-weight-lighter: 300 !default;
$font-weight-base: 400 !default;
$font-weight-bolder: 500 !default;
// Opacity Colors
$black-opacity-3: rgba(180, 180, 180, .3) !default;
// Image from Avatar
$top-dim: 1px !default;
// Shadows
$mdb-shadow-key-umbra-opacity: .2 !default;
$mdb-shadow-key-penumbra-opacity: .14 !default;
$mdb-shadow-ambient-shadow-opacity: .12 !default;
// Toolbar Height
$toolbar-min-height: 70px !default;
// Toolbar Margin
$toolbar-margin-left: 260px !default;
// Body Background Color
$body-color: #eee !default;
// Black Color
$black-color: #495057 !default;
$blockquote-color: rgba(0, 0, 0, .87) !default;
// Gray Color
$gray-light: #999 !default;
$gray: lighten(#000, 33.5%) !default;
// Inputs Color
$input-color: #d2d2d2 !default;
$label-color: #aaa !default;
// Footer Border
$footer-border-color: #e7e7e7 !default;
$footer-border-top: 1px solid $footer-border-color !default;
// Cards
$card-shadow: 0 1px 4px 0 rgba(0,0,0,0.14) !default;
$card-margin: 25px !default;
$card-content-x-padding: 20px !default;
$card-actions-y-margin: $card-content-x-padding;
$card-title-margin: 5px !default;
$card-offset: -20px !default;
$card-chart-min-height: 160px !default;
$card-stats-offset: 85px !default;
$card-stats-icons-dim: 56px !default;
$card-profile-avatar-pos: -50px !default;
// Typography
$font-family-sans-serif: 'Roboto', 'Helvetica', 'Arial', sans-serif !default;
$font-family-serif: 'Roboto Slab', 'Times New Roman', serif !default;
// Tooltips
$tooltip-min-width: 130px !default;
$tooltip-max-width: 200px !default;
$tooltip-border: 5px !default;
$tooltip-top-border-pos: 16px !default;
$tooltip-arrow-align: .255em !default;
// Buttons
$btn-icon-dim: 41px !default;
$btn-y-large-padding: 1.125rem !default;
$btn-x-large-padding: 2.25rem !default;
$btn-large-line-height: 1.333333 !default;
$btn-y-small-padding: .40625rem !default;
$btn-x-small-padding: 1.25rem !default;
$btn-round-padding: 30px !default;
$btn-font-size-icon: 1.25rem !default;
$btn-margin-icon: 7px !default;
$btn-fixed-icon-size: 1.8rem !default;
$btn-fixed-width: 64px !default;
// Tabs
$tabs-active-line: rgba(255, 255, 255, .3) !default;
$tabs-text-box-padding: 8px !default;
// Table
$table-hover-color: #f5f5f5 !default;
$table-border-color: rgba(0,0,0,.06) !default;
$table-head-height: 32px !default;
// Social Buttons
$social-facebook: #3b5998 !default;
$social-twitter: #55acee !default;
// Dropdown
$font-size-dropdown: .8125rem !default;
$border-radius-dropdown: 10px !default;
// Box-shadow
$box-shadow-general: 0 2px 5px 0 rgba($black, .26);
// letter-spacing
$WM-LetterSpacing-5: 5px;
+3
View File
@@ -0,0 +1,3 @@
export const set = property => (state, payload) => (state[property] = payload)
export const toggle = property => state => (state[property] = !state[property])
+198
View File
@@ -0,0 +1,198 @@
<template>
<v-container fluid>
<material-card class=""
color="black"
title="Add a New Test"
>
<v-layout wrap class="ma-2">
<v-flex xs12 md3 sm3>
<v-text-field
class="pa-2"
label="Test Name"
color="black">
</v-text-field>
</v-flex>
<v-flex xs12 md3 sm3>
<v-text-field
class="pa-2"
label="Unique ID"
color="black">
</v-text-field>
</v-flex>
</v-layout>
<v-layout wrap class="pa-3 my-4 mx-3 WM-Border WM-Border-Black WM-Relative">
<v-layout wrap class="pa-3 my-4 mx-3 WM-Border WM-Border-Gray WM-Relative WM-Color-LightGrey">
<v-flex xs12 md3 sm3>
<v-text-field
class="pa-2"
label="Input Name"
color="black">
</v-text-field>
</v-flex>
<v-flex xs12 md2 sm2>
<v-select
class="pa-2"
v-model="select"
:hint="`${select.state}, ${select.abbr}`"
:items="items"
item-text="state"
item-value="abbr"
label="Type"
return-object
single-line
color="black"
></v-select>
</v-flex>
<v-flex xs12 md2 sm2>
<v-select
class="pa-2"
v-model="select"
:hint="`${select.state}, ${select.abbr}`"
:items="items"
item-text="state"
item-value="abbr"
label="Size"
return-object
single-line
color="black"
></v-select>
</v-flex>
<v-flex xs12 md5 sm5>
<v-text-field
class="pa-2"
label="Value"
color="black">
</v-text-field>
</v-flex>
</v-layout>
<v-layout v-for="(Div, Key) in ArrayDiv" wrap :key="Key" class="pa-3 my-4 mx-3 WM-Border WM-Border-Gray WM-Relative WM-Color-LightGrey Form">
<v-flex xs12 md3 sm3>
<v-text-field
class="pa-2"
label="Input Name"
color="black">
</v-text-field>
</v-flex>
<v-flex xs12 md2 sm2>
<v-select
class="pa-2"
v-model="select"
:hint="`${select.state}, ${select.abbr}`"
:items="items"
item-text="state"
item-value="abbr"
label="Type"
return-object
single-line
color="black"
></v-select>
</v-flex>
<v-flex xs12 md2 sm2>
<v-select
class="pa-2"
v-model="select"
:hint="`${select.state}, ${select.abbr}`"
:items="items"
item-text="state"
item-value="abbr"
label="Size"
return-object
single-line
color="black"
></v-select>
</v-flex>
<v-flex xs12 md5 sm5>
<v-text-field
class="pa-2"
label="Value"
color="black">
</v-text-field>
</v-flex>
<v-btn
absolute
small
right
top
color="pink"
@click="Remove()"
id="RemoveFormBuilder"
>
<v-icon class="white--text mr-2 caption">fas fa-times</v-icon>
REMOVE</v-btn>
</v-layout>
<v-btn
absolute
small
right
bottom
color="cyan"
@click="Duplicator"
id="FormBuilder"
>
<v-icon class="white--text mr-2 caption">fas fa-plus</v-icon>
ADD</v-btn>
</v-layout>
<div id="WM-FormBuilder"></div>
<v-flex class="text-xs-center" xs12 md12 sm12 >
<v-btn class="WM-CyanBlueGradient-BG" style="padding:10px 60px">
<v-icon class="white--text mr-2 caption">fas fa-plus</v-icon>
<span class="white--text">Add</span>
</v-btn>
</v-flex>
</material-card>
</v-container>
</template>
<script>
export default {
data () {
return {
ArrayDiv : [],
select: { state: 'Florida', abbr: 'FL' },
items: [
{ state: 'Florida', abbr: 'FL' },
{ state: 'Georgia', abbr: 'GA' },
{ state: 'Nebraska', abbr: 'NE' },
{ state: 'California', abbr: 'CA' },
{ state: 'New York', abbr: 'NY' }
]
}
},
methods : {
Duplicator () {
var Forms = document.getElementsByClassName('Form');
var ArrayForm = [];
for(var i=0; i<Forms.length; i++) {
ArrayForm.push(Forms[i]);
}
this.ArrayDiv.push(ArrayForm);
},
Remove () {
var ID = document.getElementById('RemoveFormBuilder');
var Element = ID.parentNode;
Element.remove();
}
}
}
</script>
<style lang="css" scoped>
.WM-Border {
border: 1px solid;
}
.WM-Border-Black {
border-color: #2f353b !important;
}
.WM-Border-Gray {
border-color: #aaa !important;
}
.WM-Color-LightGrey {
background-color : #F5F5F5;
}
.WM-Relative {
position: relative;
}
.v-btn--top.v-btn--absolute.v-btn--small {
top: -25px !important;
}
</style>
+103
View File
@@ -0,0 +1,103 @@
<template>
<div class="">
<v-container fluid>
<material-card class=""
color="black"
title="All Test Resualt"
text=""
>
<v-layout align-center wrap class="my-3">
<v-flex xs12 md2 sm2>
<v-text-field
class="pa-2"
label="Name"
color="black"
>
</v-text-field>
</v-flex>
<v-flex xs12 md2 sm2>
<v-text-field
class="pa-2"
label="Date"
color="black"
>
</v-text-field>
</v-flex>
<v-flex xs12 md2 sm2>
<v-text-field
class="pa-2"
label="Hospital"
color="black"
>
</v-text-field>
</v-flex>
<v-flex class="" xs12 md2 sm2>
<v-btn class="WM-CyanBlueGradient-BG" style="padding:10px 60px">
<v-icon class="white--text mr-2 caption">fas fa-search</v-icon>
<span class="white--text">Filter</span>
</v-btn>
</v-flex>
</v-layout>
<v-divider></v-divider>
<v-layout align-center wrap class="my-3">
<v-flex xs1>
<v-card-title>
<div>
<div>
222
</div>
<div>
Test
</div>
<div class="">
1
</div>
</div>
</v-card-title>
</v-flex>
<v-flex xs6>
<v-card-text>
<p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna
</p>
</v-card-text>
</v-flex>
<v-flex xs4>
<v-card-text>
<v-btn color="black" class="mr-2">
<v-icon class="white--text mr-1 caption">fas fa-folder</v-icon>
<span>Archive</span>
</v-btn>
<v-btn color="cyan" class="mr-2">
<v-icon class="white--text mr-1 caption">fas fa-pen</v-icon>
<span>Edit</span>
</v-btn>
<v-btn color="orange darken-1">
<v-icon class="white--text mr-1 caption">fas fa-barcode</v-icon>
<span>Generate Barcode</span>
</v-btn>
</v-card-text>
</v-flex>
</v-layout>
<v-divider></v-divider>
<v-layout row wrap align-center justify-center class="mt-3">
<router-link to="/dashboard">
<v-btn
class="WM-NoShadow WM-Outline-Btn WM-Border WM-Border-Black ml-5">
<v-icon class="black--text mr-2 caption">fas fa-chevron-left</v-icon>
<span class="black--text">Back</span>
</v-btn>
</router-link>
</v-layout>
</material-card>
</v-container>
</div>
</template>
<script>
export default {
}
</script>
<style lang="css" scoped>
</style>
+45
View File
@@ -0,0 +1,45 @@
<template>
<v-container fluid>
<material-card class=""
color="black"
title="Material Dashboard Heading"
text=""
>
<v-layout row wrap>
<v-flex v-for="(Card, Key ) in Cards" :class="[Card.column , 'pa-2']" :key="Key">
<router-link :to="Card.route">
<material-cards
:title="Card.title"
:icon="Card.icon"
:color="Card.color"
:text="Card.text"
:aligntext="Card.aligntext"
:alignimg="Card.alignimg"
/>
</router-link>
</v-flex>
</v-layout>
</material-card>
</v-container>
</template>
<script>
export default {
data() {
return {
Cards :[
{title:'My Info', text:'You can easily edit your registration information',icon:'/img/Static/Dashboard/darkmug.png',color:'WM-OrangeGradient-BG',route:'/my-info',aligntext:'text-md-left',alignimg:'text-md-right', column:'xs12 md6 sm6'},
{title:'All Test Result', text:'You can see all user tests and own tests',icon:'/img/Static/Dashboard/pad.png',color:'WM-GreenGradient-BG',route:'/all-resualttest',aligntext:'text-md-left',alignimg:'text-md-right',column:'xs12 md6 sm6'},
{title:'Manage Users', text:'You can edit the medical center information',icon:'/img/Static/Dashboard/ipad.png',color:'WM-YellowPinkGradient-BG',route:'/manage-users',aligntext:'text-md-center',alignimg:'text-md-left',column:'xs12 md12 sm12'},
{title:'Manage Medical Center', text:'Managing users very fast by ...',icon:'/img/Static/Dashboard/Macbook.png',color:'WM-MuskGradient-BG',route:'/manage-medical-center',aligntext:'text-md-left',alignimg:'text-md-right',column:'xs12 md7 sm7'},
{title:'Add a Test Type', text:'You can simply add your own test type',icon:'/img/Static/Dashboard/Book-and-Pen.png',color:'WM-GreyGradient-BG',route:'/test-creator',aligntext:'text-md-left',alignimg:'text-md-right',column:'xs12 md5 sm5'},
{title:'Test to Verify', text:'You can simply add your own test type in this section of website',icon:'/img/Static/Dashboard/notepad-colorful.png',color:'WM-PinkGradient-BG',route:'/submit-test-result',aligntext:'text-md-center',alignimg:'text-md-left',column:'xs12 md12 sm12'},
{title:'Add a Test Result', text:'You can edit the medical center information',icon:'/img/Static/Dashboard/ipad.png',color:'WM-YellowPinkGradient-BG',route:'/manage-medical-center',aligntext:'text-md-center',alignimg:'text-md-left',column:'xs12 md12 sm12'},
]
}
}
}
</script>
<style lang="scss">
</style>
+281
View File
@@ -0,0 +1,281 @@
<template>
<v-container
fill-height
fluid
style="flex-wrap: wrap;"
>
<material-card color="green">
<div
slot="header"
>
<div class="title font-weight-light mb-2">Material Design Icons</div>
<div class="category font-weight-thin">
See all available
<a
class="white--text"
href="https://materialdesignicons.com/"
target="_blank"
>
Icons
</a>
</div>
</div>
<v-layout
align-center
justify-center
wrap
>
<v-flex
v-for="icon in icons"
:key="icon"
ma-2
>
<v-tooltip
top
content-class="top">
<v-icon slot="activator">
{{ icon }}
</v-icon>
<span>{{ icon }}</span>
</v-tooltip>
</v-flex>
</v-layout>
</material-card>
<div class="mx-auto">
<v-btn
large
class="mx-0 font-weight-light"
color="success"
href="https://materialdesignicons.com/"
target="_blank"
round
>
<v-icon left>mdi-material-design</v-icon>
<span>See all icons</span>
</v-btn>
</div>
</v-container>
</template>
<script>
export default {
data: () => ({
icons: [
'mdi-access-point',
'mdi-access-point-network',
'mdi-account',
'mdi-account-alert',
'mdi-account-box',
'mdi-account-box-multiple',
'mdi-account-box-outline',
'mdi-account-card-details',
'mdi-account-check',
'mdi-account-circle',
'mdi-account-convert',
'mdi-account-edit',
'mdi-account-group',
'mdi-account-heart',
'mdi-account-key',
'mdi-account-location',
'mdi-account-minus',
'mdi-account-multiple',
'mdi-account-multiple-check',
'mdi-account-multiple-minus',
'mdi-account-multiple-outline',
'mdi-account-multiple-plus',
'mdi-account-multiple-plus-outline',
'mdi-account-network',
'mdi-account-off',
'mdi-account-outline',
'mdi-account-plus',
'mdi-account-plus-outline',
'mdi-account-remove',
'mdi-account-search',
'mdi-account-search-outline',
'mdi-account-settings',
'mdi-account-settings-variant',
'mdi-account-star',
'mdi-account-switch',
'mdi-accusoft',
'mdi-adjust',
'mdi-adobe',
'mdi-air-conditioner',
'mdi-airballoon',
'mdi-airplane',
'mdi-airplane-landing',
'mdi-airplane-off',
'mdi-airplane-takeoff',
'mdi-airplay',
'mdi-airport',
'mdi-alarm',
'mdi-alarm-bell',
'mdi-alarm-check',
'mdi-alarm-light',
'mdi-alarm-multiple',
'mdi-alarm-off',
'mdi-alarm-plus',
'mdi-alarm-snooze',
'mdi-album',
'mdi-alert',
'mdi-alert-box',
'mdi-alert-circle',
'mdi-alert-circle-outline',
'mdi-alert-decagram',
'mdi-alert-octagon',
'mdi-alert-octagram',
'mdi-alert-outline',
'mdi-alien',
'mdi-all-inclusive',
'mdi-alpha',
'mdi-alphabetical',
'mdi-altimeter',
'mdi-amazon',
'mdi-amazon-alexa',
'mdi-amazon-drive',
'mdi-ambulance',
'mdi-amplifier',
'mdi-anchor',
'mdi-android',
'mdi-android-debug-bridge',
'mdi-android-head',
'mdi-android-studio',
'mdi-angle-acute',
'mdi-angle-obtuse',
'mdi-angle-right',
'mdi-angular',
'mdi-angularjs',
'mdi-animation',
'mdi-animation-play',
'mdi-anvil',
'mdi-apple',
'mdi-apple-finder',
'mdi-apple-icloud',
'mdi-apple-ios',
'mdi-apple-keyboard-caps',
'mdi-apple-keyboard-command',
'mdi-apple-keyboard-control',
'mdi-apple-keyboard-option',
'mdi-apple-keyboard-shift',
'mdi-apple-safari',
'mdi-application',
'mdi-approval',
'mdi-apps',
'mdi-arch',
'mdi-archive',
'mdi-arrange-bring-forward',
'mdi-arrange-bring-to-front',
'mdi-arrange-send-backward',
'mdi-arrange-send-to-back',
'mdi-arrow-all',
'mdi-arrow-bottom-left',
'mdi-arrow-bottom-left-bold-outline',
'mdi-arrow-bottom-left-thick',
'mdi-arrow-bottom-right',
'mdi-arrow-bottom-right-bold-outline',
'mdi-arrow-bottom-right-thick',
'mdi-arrow-collapse',
'mdi-arrow-collapse-all',
'mdi-arrow-collapse-down',
'mdi-arrow-collapse-horizontal',
'mdi-arrow-collapse-left',
'mdi-arrow-collapse-right',
'mdi-arrow-collapse-up',
'mdi-arrow-collapse-vertical',
'mdi-arrow-decision',
'mdi-arrow-decision-auto',
'mdi-arrow-decision-auto-outline',
'mdi-arrow-decision-outline',
'mdi-arrow-down',
'mdi-arrow-down-bold',
'mdi-arrow-down-bold-box',
'mdi-arrow-down-bold-box-outline',
'mdi-arrow-down-bold-circle',
'mdi-arrow-down-bold-circle-outline',
'mdi-arrow-down-bold-hexagon-outline',
'mdi-arrow-down-bold-outline',
'mdi-arrow-down-box',
'mdi-arrow-down-drop-circle',
'mdi-arrow-down-drop-circle-outline',
'mdi-arrow-down-thick',
'mdi-arrow-expand',
'mdi-arrow-expand-all',
'mdi-arrow-expand-down',
'mdi-arrow-expand-horizontal',
'mdi-arrow-expand-left',
'mdi-arrow-expand-right',
'mdi-arrow-expand-up',
'mdi-arrow-expand-vertical',
'mdi-arrow-left',
'mdi-arrow-left-bold',
'mdi-arrow-left-bold-box',
'mdi-arrow-left-bold-box-outline',
'mdi-arrow-left-bold-circle',
'mdi-arrow-left-bold-circle-outline',
'mdi-arrow-left-bold-hexagon-outline',
'mdi-arrow-left-bold-outline',
'mdi-arrow-left-box',
'mdi-arrow-left-drop-circle',
'mdi-arrow-left-drop-circle-outline',
'mdi-arrow-left-right-bold-outline',
'mdi-arrow-left-thick',
'mdi-arrow-right',
'mdi-arrow-right-bold',
'mdi-arrow-right-bold-box',
'mdi-arrow-right-bold-box-outline',
'mdi-arrow-right-bold-circle',
'mdi-arrow-right-bold-circle-outline',
'mdi-arrow-right-bold-hexagon-outline',
'mdi-arrow-right-bold-outline',
'mdi-arrow-right-box',
'mdi-arrow-right-drop-circle',
'mdi-arrow-right-drop-circle-outline',
'mdi-arrow-right-thick',
'mdi-arrow-split-horizontal',
'mdi-arrow-split-vertical',
'mdi-arrow-top-left',
'mdi-arrow-top-left-bold-outline',
'mdi-arrow-top-left-thick',
'mdi-arrow-top-right',
'mdi-arrow-top-right-bold-outline',
'mdi-arrow-top-right-thick',
'mdi-arrow-up',
'mdi-arrow-up-bold',
'mdi-arrow-up-bold-box',
'mdi-arrow-up-bold-box-outline',
'mdi-arrow-up-bold-circle',
'mdi-arrow-up-bold-circle-outline',
'mdi-arrow-up-bold-hexagon-outline',
'mdi-arrow-up-bold-outline',
'mdi-arrow-up-box',
'mdi-arrow-up-down-bold-outline',
'mdi-arrow-up-drop-circle',
'mdi-arrow-up-drop-circle-outline',
'mdi-arrow-up-thick',
'mdi-artist',
'mdi-assistant',
'mdi-asterisk',
'mdi-at',
'mdi-atlassian',
'mdi-atom',
'mdi-attachment',
'mdi-audio-video',
'mdi-audiobook',
'mdi-augmented-reality',
'mdi-auto-fix',
'mdi-auto-upload',
'mdi-autorenew',
'mdi-av-timer',
'mdi-axe',
'mdi-azure',
'mdi-baby',
'mdi-baby-buggy',
'mdi-backburger',
'mdi-backspace',
'mdi-backup-restore',
'mdi-badminton'
]
})
}
</script>
+90
View File
@@ -0,0 +1,90 @@
<template>
<v-form >
<v-container grid-list-xs>
<v-layout row wrap class="justify-center">
<v-flex xs12 md3 sm3 class="WM-WidthScreen-SM WM-WidthScreen-XS">
<material-card
color="black"
title="Login Page">
<v-layout row wrap class="px-3">
<v-flex xs12 md12 sm12>
<v-text-field
v-model="cell_number"
name="cellnumber"
label="Cell Number"
id="id1"
color="black"
></v-text-field>
</v-flex>
</v-layout>
<v-layout row wrap class="px-3">
<v-flex xs12 md12 sm12>
<v-text-field
v-model="password"
name="password"
label="Password"
id="id2"
color="black"
></v-text-field>
</v-flex>
</v-layout>
<v-layout row wrap class="px-3">
<v-flex xs12 md6 sm6 class="text-md-left text-sm-center text-xs-center">
<v-btn class="WM-CyanBlueGradient-BG" style="padding:10px 60px" @click="handleSubmit">
<v-icon class="white--text mr-2 caption">fas fa-sign-in-alt</v-icon>
<span class="white--text">Login</span>
</v-btn>
</v-flex>
<v-flex xs12 md6 sm6 class="text-md-right text-sm-center text-xs-center">
<v-btn class="WM-NoShadow WM-Outline-Btn WM-Border WM-Border-Black">
<v-icon class="black--text mr-2 caption">fas fa-plus</v-icon>
<span class="black--text">Register</span>
</v-btn>
</v-flex>
</v-layout>
<v-layout row wrap class="text-md-left text-sm-center text-xs-center">
<v-flex xs12 md6 sm6 class="px-4 py-3">
<router-link to="/submittestresualt">
<span class="black--text" style="border-bottom:1px solid #000;">Forgot Password ?</span>
</router-link>
</v-flex>
</v-layout>
</material-card>
</v-flex>
</v-layout>
</v-container>
</v-form>
</template>
<script>
import { mapGetters, mapActions } from "vuex";
export default {
data() {
return {
cell_number: "",
password: "",
};
},
computed: {
...mapGetters('auth', [
'authenticating',
'authenticationError',
'authenticationErrorCode'
])
},
methods: {
...mapActions('auth', [
'login'
]),
handleSubmit() {
// Perform a simple validation that cell_number and password have been typed in
if (this.cell_number != '' && this.password != '') {
this.login({cell_number: this.cell_number, password: this.password});
this.password = "";
}
}
}
};
</script>
<style lang="scss" scoped>
</style>
@@ -0,0 +1,131 @@
<template>
<v-container fluid>
<material-card class=""
color="black"
title="Medical Centers List"
text=""
>
<v-layout wrap class="px-5 mb-3">
<v-flex xs12 md3 sm3>
<v-text-field
label="Name"
color="black">
</v-text-field>
</v-flex>
<!-- <v-spacer></v-spacer> -->
<v-flex xs12 md2 sm2 class="text-xs-right">
<v-btn class="WM-CyanBlueGradient-BG" style="padding:10px 60px">
<v-icon class="white--text mr-2 caption">fas fa-search</v-icon>
<span class="white--text">Filter</span>
</v-btn>
</v-flex>
</v-layout>
<v-layout class="px-4 my-3">
<v-divider></v-divider>
</v-layout>
<v-layout align-center justify-center wrap class="px-5 mt-3">
<v-flex
md12
>
<v-data-table
:headers="headers"
:items="items"
hide-actions
>
<template
slot="headerCell"
slot-scope="{ header }"
>
<span
class="subheading font-weight-light text-white text--darken-3"
v-text="header.text"
/>
</template>
<template
slot="items"
slot-scope="{ item }"
>
<td class="headline font-weight-light">{{ item.name }}</td>
<td class="title font-weight-light">{{ item.date }}</td>
<td class="title font-weight-light">{{ item.operator }}</td>
<td class="text-xs-right">
<v-btn color="cyan" class="mr-2 WM-ActionButton">
<v-icon class="white--text mr-2 caption">fas fa-pen</v-icon>
<span>Edit</span>
</v-btn>
<v-btn color="orange darken-1" class="mr-2 WM-ActionButton">
<v-icon class="white--text mr-2 caption">fas fa-user</v-icon>
<span>Operator</span>
</v-btn>
<v-btn color="pink" class=" WM-ActionButton">
<v-icon class="white--text mr-2 caption">fas fa-times</v-icon>
<span>Remove</span>
</v-btn>
</td>
</template>
</v-data-table>
</v-flex>
</v-layout>
<v-divider></v-divider>
<v-layout row wrap align-center justify-center class="mt-3">
<router-link to="/dashboard">
<v-btn class="WM-NoShadow WM-Outline-Btn WM-Border WM-Border-Black ml-5">
<v-icon class="black--text mr-2 caption">fas fa-chevron-left</v-icon>
<span class="black--text">Back</span>
</v-btn>
</router-link>
</v-layout>
</material-card>
</v-container>
</template>
<script>
export default {
data: () => ({
headers: [
{
sortable: false,
text: 'Hospital Name',
value: 'name'
},
{
sortable: false,
text: 'Date',
value: 'date'
},
{
sortable: false,
text: 'Operator',
value: 'operator'
},
{
sortable: false,
text: 'Action',
value: 'action',
align: 'right'
}
],
items: [
{
name: 'Shahid Beheshti',
date: '12/05/1397',
operator: '3 Operator',
action: ''
},
{
name: 'Emam Reza',
date: '12/05/1397',
operator: '5 Operator',
action: ''
},
]
})
}
</script>
<style lang="css" scoped>
.WM-ActionButton {
padding : 8px 22px;
}
</style>
+147
View File
@@ -0,0 +1,147 @@
<template>
<v-container grid-list-xs>
<material-card
color="black"
title="Member List">
<v-layout align-center justify-center wrap class="px-5 mb-3">
<v-flex xs12 md3 sm3>
<v-text-field
class="pa-2"
color="black"
name="name"
label="Name"
id="id1"
></v-text-field>
</v-flex>
<v-flex xs12 md3 sm3>
<v-text-field
class="pa-2"
color="black"
name="date"
label="Date"
id="id2"
></v-text-field>
</v-flex>
<v-flex xs12 md3 sm3>
<v-text-field
class="pa-2"
color="black"
name="hospital"
label="Hospital"
id="id3"
></v-text-field>
</v-flex>
<v-flex xs12 md3 sm3>
<v-btn class="WM-CyanBlueGradient-BG" style="padding:10px 60px">
<v-icon class="white--text mr-2 caption">fas fa-search</v-icon>
<span class="white--text">Filter</span>
</v-btn>
</v-flex>
</v-layout>
<v-layout class="px-4 my-3">
<v-divider></v-divider>
</v-layout>
<v-layout align-center justify-center wrap class="px-5 my-2">
<v-flex xs12 md12 sm12>
<v-data-table
:headers="headers"
:items="items"
hide-actions
>
<template
slot="headerCell"
slot-scope="{ header }">
<span
class="subheading font-weight-light text-white text--darken-3"
v-text="header.text"
/>
</template>
<template
slot="items"
slot-scope="{ item }">
<td class="headline font-weight-light">{{item.name}}</td>
<td class="title font-weight-light">{{item.date}}</td>
<td class="title font-weight-light">{{item.operator}}</td>
<td class="text-xs-right">
<v-btn color="purple" class="mr-2 WM-ActionButton">
<v-icon class="white--text mr-1 caption">fas fa-envelope</v-icon>
<span>SMS</span>
</v-btn>
<v-btn color="cyan" class="mr-2 WM-ActionButton">
<v-icon class="white--text mr-1 caption">fas fa-pen</v-icon>
<span>Edit</span>
</v-btn>
<v-btn color="orange darken-1" class="mr-2 WM-ActionButton">
<v-icon class="white--text mr-1 caption">fas fa-user</v-icon>
<span>Operator</span>
</v-btn>
<v-btn color="pink" class=" WM-ActionButton">
<v-icon class="white--text mr-1 caption">fas fa-times</v-icon>
<span>Remove</span>
</v-btn>
</td>
</template>
</v-data-table>
</v-flex>
</v-layout>
<v-layout class="px-4 my-3">
<v-divider></v-divider>
</v-layout>
<v-layout row wrap align-center justify-center class="mt-3">
<router-link to="/dashboard">
<v-btn class="WM-NoShadow WM-Outline-Btn WM-Border WM-Border-Black ml-5">
<v-icon class="black--text mr-2 caption">fas fa-chevron-left</v-icon>
<span class="black--text">Back</span>
</v-btn>
</router-link>
</v-layout>
</material-card>
</v-container>
</template>
<script>
export default {
data: () => ({
headers : [
{
sortable : true,
text: 'Operator',
value: 'operator'
},
{
sortable : true,
text: 'Date',
value: 'date'
},
{
sortable : true,
text: 'Hospital',
value: 'hospital'
},
{
sortable : true,
text: 'Action',
value: 'action',
align: 'right'
},
],
items: [
{
name: 'Fatemeh Shokouhi',
date: '12/05/1397',
operator: 'Shahid Beheshti',
action: ''
},
{
name: 'Fatemeh Fayyazi',
date: '12/05/1397',
operator: 'Emam Reza',
action: ''
},
]
})
}
</script>
<style lang="css" scoped>
</style>
+33
View File
@@ -0,0 +1,33 @@
<template>
<div>
<div class="mapouter">
<div class="gmap_canvas">
<iframe
id="gmap_canvas"
width="100%"
height="100%"
src="https://maps.google.com/maps?q=google&t=&z=13&ie=UTF8&iwloc=&output=embed"
frameborder="0"
scrolling="no"
marginheight="0"
marginwidth="0"
/>
</div>
</div>
</div>
</template>
<style>
.mapouter {
text-align:right;
height:100%;
width:100%;
position: absolute;
}
.gmap_canvas {
overflow:hidden;
background:none!important;
height:100%;
width:100%;
}
</style>
+121
View File
@@ -0,0 +1,121 @@
<template>
<v-form>
<v-container grid-list-xs fluid>
<material-card
color="black"
title="My Info">
<v-layout align-center justify-center wrap class="px-5 my-3">
<v-flex xs12 sm4 md4>
<v-text-field
name="username"
label="User Name"
color="black"
v-model="username"
id="id1"
class="pa-2"
></v-text-field>
</v-flex>
<v-flex xs12 sm4 md4>
<v-select
:items="items"
label="Gender"
name="gender"
v-model="gender"
single-line
id="id3"
class="pa-2"
color="black">
</v-select>
</v-flex>
<v-flex xs12 sm4 md4>
<v-text-field
name="cellnumber"
label="Cell Number"
v-model="cellnumber"
color="black"
class="pa-2"
id="id2"
></v-text-field>
</v-flex>
</v-layout>
<v-layout align-center justify-center wrap class="px-5 mb-3">
<v-flex xs12 sm4 md4>
<v-text-field
name="emailaddress"
label="Email Address"
v-model="emailaddress"
id="id4"
class="px-2"
color="black"
style="padding-top:75px"
></v-text-field>
</v-flex>
<v-flex xs12 sm8 md8>
<v-textarea
color="black"
v-model="address"
class="pa-2"
name="address">
<template v-slot:label>
<div>
Address
</div>
</template>
</v-textarea>
</v-flex>
</v-layout>
<v-layout row wrap justify-center align-center>
<v-flex xs12 md2 sm2 class="text-md-center text-xs-center">
<v-btn class="WM-CyanBlueGradient-BG" style="padding:10px 60px">
<v-icon class="white--text mr-2 caption">fas fa-check</v-icon>
<span class="white--text">SAVE</span>
</v-btn>
</v-flex>
<v-flex xs12 md2 sm2 class="text-md-center text-sm-center text-xs-center">
<router-link to="/">
<v-btn class="WM-NoShadow WM-Outline-Btn WM-Border WM-Border-Black">
<v-icon class="black--text">keyboard_arrow_left</v-icon>
<span class="black--text">Back</span>
</v-btn>
</router-link>
</v-flex>
</v-layout>
</material-card>
</v-container>
</v-form>
</template>
<script>
export default {
data() {
return {
username:'',
gender:'',
cellnumber:'',
emailaddress:'',
address:'',
items: [
'Item 1',
'Item 2',
'Item 3',
'Item 4'
],
}
// const Info = Object.freeze({
// username:'',
// cellnumber:'',
// emailaddress:'',
// address:''
// gender:0
// })
// return {
// InfoForm : Object.assign({} ,Info),
// Info
// }
}
}
</script>
<style lang="css" scoped>
</style>
+269
View File
@@ -0,0 +1,269 @@
<template>
<v-container
fluid
grid-list-xl
fill-height>
<v-layout
justify-center
align-center
>
<v-flex xs12>
<material-card
color="green">
<div
slot="header"
>
<div class="title font-weight-light mb-2">Notifications</div>
<div class="category">
Handcrafted by us with
<v-icon
size="17"
>
mdi-heart
</v-icon>
</div>
</div>
<v-card-text>
<v-layout
row
wrap>
<v-flex
md6
sm12>
<h2 class="title font-weight-light mb-3">Notifications Style</h2>
<material-notification
class="mb-3"
color="info"
>
This is a plain notification
</material-notification>
<material-notification
class="mb-3"
color="info"
dismissible
>
This is a notification with close button.
</material-notification>
<material-notification
class="mb-3"
color="info"
dismissible
icon="mdi-bell-plus"
>
This is a notification with close button and icon.
</material-notification>
<material-notification
class="mb-3"
color="info"
dismissible
icon="mdi-bell-plus"
>
This is a notification with close button and icon and have many lines. You can see that the icon and the close button are always vertically aligned. This is a beautiful notification. So you don't have to worry about the style.
</material-notification>
</v-flex>
<v-flex
md6
sm12>
<h2 class="title font-weight-light">Notifcation States</h2>
<material-notification
class="mb-3"
color="info"
dismissible
>
<strong>INFO</strong> - This is a regular notification made with `color="info"`
</material-notification>
<material-notification
class="mb-3"
color="success"
dismissible
>
<strong>SUCCESS</strong> - This is a regular notification made with `color="success"`
</material-notification>
<material-notification
class="mb-3"
color="warning"
dismissible
>
<strong>WARNING</strong> - This is a regular notification made with `color="warning"`
</material-notification>
<material-notification
class="mb-3"
color="error"
dismissible
>
<strong>DANGER</strong> - This is a regular notification made with `color="error"`
</material-notification>
<material-notification
class="mb-3"
color="purple"
dismissible
>
<strong>PRIMARY</strong> - This is a regular notification made with `color="purple"`
</material-notification>
</v-flex>
</v-layout>
<div class="text-xs-center">
<h2 class="title font-weight-light mb-2">Notification Places</h2>
<span class=" subheading font-weight-light grey--text">Click to view notifications</span>
</div>
<v-container grid-list-lg>
<v-layout
justify-center
row
wrap>
<v-flex
xs12
sm4>
<v-btn
block
color="success"
@click="snack('top', 'left')"
>
Top Left
</v-btn>
</v-flex>
<v-flex
xs12
sm4>
<v-btn
block
color="success"
@click="snack('top')"
>
Top Center
</v-btn>
</v-flex>
</v-layout>
<v-layout
justify-center
row
wrap>
<v-flex
xs12
sm4>
<v-btn
block
color="success"
@click="snack('top', 'right')"
>
Top Right
</v-btn>
</v-flex>
<v-flex
xs12
sm4>
<v-btn
block
color="success"
@click="snack('bottom', 'left')"
>
Bottom Left
</v-btn>
</v-flex>
</v-layout>
<v-layout
justify-center
row
wrap>
<v-flex
xs12
sm4>
<v-btn
block
color="success"
@click="snack('bottom')"
>
Bottom Center
</v-btn>
</v-flex>
<v-flex
xs12
sm4>
<v-btn
block
color="success"
@click="snack('bottom', 'right')"
>
Bottom Right
</v-btn>
</v-flex>
</v-layout>
</v-container>
<v-snackbar
:color="color"
:bottom="bottom"
:top="top"
:left="left"
:right="right"
v-model="snackbar"
dark
>
<v-icon
color="white"
class="mr-3"
>
mdi-bell-plus
</v-icon>
<div>Welcome to <b>Vue Material Dashboard</b> - a beautiful freebie for every web developer.</div>
<v-icon
size="16"
@click="snackbar = false"
>
mdi-close-circle
</v-icon>
</v-snackbar>
</v-card-text>
</material-card>
</v-flex>
</v-layout>
</v-container>
</template>
<script>
export default {
data: () => ({
color: null,
colors: [
'purple',
'info',
'success',
'warning',
'error'
],
top: true,
bottom: false,
left: false,
right: false,
snackbar: false
}),
methods: {
snack (...args) {
this.top = false
this.bottom = false
this.left = false
this.right = false
for (const loc of args) {
this[loc] = true
}
this.color = this.colors[Math.floor(Math.random() * this.colors.length)]
this.snackbar = true
}
}
}
</script>
+105
View File
@@ -0,0 +1,105 @@
<template>
<v-form v-model="valid">
<v-container grid-list-xs>
<v-layout row wrap class="justify-center">
<v-flex xs12 md3 sm6 class="WM-WidthScreen-SM WM-WidthScreen-XS">
<material-card color="black" title="Register Page">
<v-layout column>
<v-flex xs12 md2 sm2>
<v-text-field
name="cellnumber"
label="Cell Number"
v-model="form.cellnumber"
id="id1"
color="black"
class="pa-2"
></v-text-field>
</v-flex>
<v-flex xs12 md2 sm2>
<v-text-field
name="password"
label="Password"
v-model="form.password"
:type="show1 ? 'text' : 'password'"
:append-icon="show1 ? 'visibility' : 'visibility_off'"
@click:append="show1 = !show1"
id="id2"
color="black"
class="pa-2"
></v-text-field>
</v-flex>
<v-flex xs12 md2 sm2>
<v-text-field
name="name"
label="Name"
v-model="form.name"
id="id3"
color="black"
class="pa-2"
></v-text-field>
</v-flex>
<v-flex xs12 md2 sm2>
<v-select
class="pa-2"
v-model="form.select"
:items="items"
item-text="state"
item-value="abbr"
label="Type"
return-object
single-line
color="black"
></v-select>
</v-flex>
</v-layout>
<v-layout row wrap>
<v-flex xs12 md6 sm6 class="text-md-left text-sm-center text-xs-center">
<v-btn class="WM-CyanBlueGradient-BG" style="padding:10px 60px">
<v-icon class="white--text mr-2 caption">fas fa-plus</v-icon>
<span class="white--text">Register</span>
</v-btn>
</v-flex>
<v-flex xs12 md6 sm6 class="text-md-right text-sm-center text-xs-center">
<router-link to="/login">
<v-btn class="WM-NoShadow WM-Outline-Btn WM-Border WM-Border-Black">
<v-icon class="black--text mr-2 caption">fas fa-sign-in-alt</v-icon>
<span class="black--text">Login</span>
</v-btn>
</router-link>
</v-flex>
</v-layout>
</material-card>
</v-flex>
</v-layout>
</v-container>
</v-form>
</template>
<script>
export default {
name: "",
data () {
const defaultForm = Object.freeze({
cellnumber: '',
password: '',
name: '',
select: '',
})
return {
form: Object.assign({}, defaultForm),
valid : false,
show1 : false,
select: { state: 'Florida', abbr: 'FL' },
items: [
{ state: 'Florida', abbr: 'FL' },
{ state: 'Georgia', abbr: 'GA' },
{ state: 'Nebraska', abbr: 'NE' },
{ state: 'California', abbr: 'CA' },
{ state: 'New York', abbr: 'NY' }
],
defaultForm
}
}
}
</script>
<style lang="scss" scoped>
</style>
@@ -0,0 +1,96 @@
<template>
<v-form>
<v-container grid-list-xs>
<material-card
color="black"
title="Submit Test Result">
<v-layout align-center justify-center wrap class="px-5 my-3">
<v-flex xs12 sm4 md4>
<v-select
:items="items"
label="Choose Test Type"
color="black"
class="pa-2"
></v-select>
</v-flex>
<v-flex xs12 sm3 md3>
<v-text-field
name="testcode"
label="Or Enter Test Code"
id="id"
color="black"
class="pa-2"
></v-text-field>
</v-flex>
<v-flex xs12 md2 sm2 class="text-xs-center text-sm-center text-md-center">
<v-btn class="WM-NoShadow WM-Outline-Btn WM-Border WM-Border-Black" style="padding:10px 60px;">
<v-icon class="black--text mr-2 caption">fas fa-chevron-right</v-icon>
<span class="black--text">GO</span>
</v-btn>
</v-flex>
</v-layout>
<v-layout row wrap class="px-5 my-3">
<v-divider></v-divider>
</v-layout>
<v-layout align-center justify-center wrap class="px-5 my-3">
<v-flex xs12 sm4 md4>
<v-text-field
name="cssd"
label="ID CSSD"
color="black"
id="id"
class="pa-2"
></v-text-field>
</v-flex>
<v-flex xs12 sm4 md4>
<v-text-field
name="autoclave"
label="ID AutoClave"
color="black"
id="id"
class="pa-2"
></v-text-field>
</v-flex>
<v-flex xs12 sm4 md4>
<v-select
:items="items"
label="Resualt"
color="black"
class="pa-2"
></v-select>
</v-flex>
</v-layout>
<v-layout row wrap class="px-5 my-3">
<v-divider></v-divider>
</v-layout>
<v-layout align-center justify-center wrap class="px-5 mt-2">
<v-btn class="WM-CyanBlueGradient-BG" style="padding:10px 60px">
<v-icon class="white--text mr-2 caption">fas fa-check</v-icon>
<span class="white--text">SAVE</span>
</v-btn>
<router-link to="/dashboard">
<v-btn class="WM-NoShadow WM-Outline-Btn WM-Border WM-Border-Black ml-5">
<v-icon class="black--text mr-2 caption">fas fa-chevron-left</v-icon>
<span class="black--text">Back</span>
</v-btn>
</router-link>
</v-layout>
</material-card>
</v-container>
</v-form>
</template>
<script>
export default {
name: "",
data: () => ({
items: [
'Item 1',
'Item 2',
'Item 3',
'Item 4'
]
})
}
</script>
<style lang="scss" scoped>
</style>
@@ -0,0 +1,27 @@
<template>
<v-form>
<v-container grid-list-xs>
<v-layout row wrap>
<material-card color="black" title="User Info">
<v-flex xs12 sm4 md4>
<v-text-field
name="name"
label="label"
id="id"
></v-text-field>
</v-flex>
</material-card>
</v-layout>
</v-container>
</v-form>
</template>
<script>
export default {
name: "",
data: () => ({
})
}
</script>
<style lang="scss" scoped>
</style>
@@ -0,0 +1,136 @@
<template>
<v-card>
<v-card-title>
Nutrition
<v-spacer></v-spacer>
<v-text-field
v-model="search"
append-icon="search"
label="Search"
single-line
hide-details
></v-text-field>
</v-card-title>
<v-data-table
:headers="headers"
:items="desserts"
:search="search"
>
<template v-slot:items="props">
<td>{{ props.item.name }}</td>
<td class="text-xs-right">{{ props.item.calories }}</td>
<td class="text-xs-right">{{ props.item.fat }}</td>
<td class="text-xs-right">{{ props.item.carbs }}</td>
<td class="text-xs-right">{{ props.item.protein }}</td>
<td class="text-xs-right">{{ props.item.iron }}</td>
</template>
<v-alert v-slot:no-results :value="true" color="error" icon="warning">
Your search for "{{ search }}" found no results.
</v-alert>
</v-data-table>
</v-card>
</template>
<script>
export default {
data () {
return {
search: '',
headers: [
{
text: 'Dessert (100g serving)',
align: 'left',
sortable: false,
value: 'name'
},
{ text: 'Calories', value: 'calories' },
{ text: 'Fat (g)', value: 'fat' },
{ text: 'Carbs (g)', value: 'carbs' },
{ text: 'Protein (g)', value: 'protein' },
{ text: 'Iron (%)', value: 'iron' }
],
desserts: [
{
name: 'Frozen Yogurt',
calories: 159,
fat: 6.0,
carbs: 24,
protein: 4.0,
iron: '1%'
},
{
name: 'Ice cream sandwich',
calories: 237,
fat: 9.0,
carbs: 37,
protein: 4.3,
iron: '1%'
},
{
name: 'Eclair',
calories: 262,
fat: 16.0,
carbs: 23,
protein: 6.0,
iron: '7%'
},
{
name: 'Cupcake',
calories: 305,
fat: 3.7,
carbs: 67,
protein: 4.3,
iron: '8%'
},
{
name: 'Gingerbread',
calories: 356,
fat: 16.0,
carbs: 49,
protein: 3.9,
iron: '16%'
},
{
name: 'Jelly bean',
calories: 375,
fat: 0.0,
carbs: 94,
protein: 0.0,
iron: '0%'
},
{
name: 'Lollipop',
calories: 392,
fat: 0.2,
carbs: 98,
protein: 0,
iron: '2%'
},
{
name: 'Honeycomb',
calories: 408,
fat: 3.2,
carbs: 87,
protein: 6.5,
iron: '45%'
},
{
name: 'Donut',
calories: 452,
fat: 25.0,
carbs: 51,
protein: 4.9,
iron: '22%'
},
{
name: 'KitKat',
calories: 518,
fat: 26.0,
carbs: 65,
protein: 7,
iron: '6%'
}
]
}
}
}
</script>
+147
View File
@@ -0,0 +1,147 @@
<template>
<v-container
fill-height
fluid
grid-list-xl
>
<v-layout
justify-center
wrap
>
<v-flex
md12
>
<material-card
color="green"
title="Simple Table"
text="Here is a subtitle for this table"
>
<v-data-table
:headers="headers"
:items="items"
hide-actions
>
<template
slot="headerCell"
slot-scope="{ header }"
>
<span
class="subheading font-weight-light text-success text--darken-3"
v-text="header.text"
/>
</template>
<template
slot="items"
slot-scope="{ item }"
>
<td>{{ item.name }}</td>
<td>{{ item.country }}</td>
<td>{{ item.city }}</td>
<td class="text-xs-right">{{ item.salary }}</td>
</template>
</v-data-table>
</material-card>
</v-flex>
<v-flex
md12
>
<material-card
color="green"
flat
full-width
title="Table on Plain Background"
text="Here is a subtitle for this table"
>
<v-data-table
:headers="headers"
:items="items.slice(0, 7)"
hide-actions
>
<template
slot="headerCell"
slot-scope="{ header }"
>
<span
class="subheading font-weight-light text--darken-3"
v-text="header.text"
/>
</template>
<template
slot="items"
slot-scope="{ item }"
>
<td>{{ item.name }}</td>
<td>{{ item.country }}</td>
<td>{{ item.city }}</td>
<td class="text-xs-right">{{ item.salary }}</td>
</template>
</v-data-table>
</material-card>
</v-flex>
</v-layout>
</v-container>
</template>
<script>
export default {
data: () => ({
headers: [
{
sortable: false,
text: 'Name',
value: 'name'
},
{
sortable: false,
text: 'Country',
value: 'country'
},
{
sortable: false,
text: 'City',
value: 'city'
},
{
sortable: false,
text: 'Salary',
value: 'salary',
align: 'right'
}
],
items: [
{
name: 'Dakota Rice',
country: 'Niger',
city: 'Oud-Tunrhout',
salary: '$35,738'
},
{
name: 'Minerva Hooper',
country: 'Curaçao',
city: 'Sinaai-Waas',
salary: '$23,738'
}, {
name: 'Sage Rodriguez',
country: 'Netherlands',
city: 'Overland Park',
salary: '$56,142'
}, {
name: 'Philip Chanley',
country: 'Korea, South',
city: 'Gloucester',
salary: '$38,735'
}, {
name: 'Doris Greene',
country: 'Malawi',
city: 'Feldkirchen in Kārnten',
salary: '$63,542'
}, {
name: 'Mason Porter',
country: 'Chile',
city: 'Gloucester',
salary: '$78,615'
}
]
})
}
</script>
+392
View File
@@ -0,0 +1,392 @@
<template>
<v-form id="ParentForm">
<v-container grid-list-xs>
<material-card
color="black"
title="Add a New Test"
class="">
<v-layout row wrap class="pb-4 ma-2 WM-Border WM-Border-Gray WM-BG-White WM-Relative">
<v-layout row wrap id="Form" class="ma-2">
<v-flex xs12 md3 sm3>
<v-text-field
name="name"
label="Name"
color="black"
class="pa-2"
id="name"
></v-text-field>
</v-flex>
<v-flex xs12 md3 sm3>
<v-select
:items="Items[0]"
item-text="state"
item-value="abbr"
label="Type"
v-model="SelectedType[0]"
single-line
color="black"
class="pa-2"
@change="DefaultValue(0, SelectedType[0])"
></v-select>
</v-flex>
<!-- Text Input Section -->
<v-flex xs12 md3 sm3 v-if="SelectedType[0] === 'text'">
<v-text-field
name="size"
label="Size"
color="black"
class="pa-2"
id="InputSize"
></v-text-field>
</v-flex>
</v-layout>
<!-- SelectBox Section -->
<v-layout class="ma-3 pa-3 WM-Border WM-Border-Black WM-Relative WM-Width-Full" row wrap v-if="SelectedType[0] === 'select'">
<v-layout row wrap class="WM-Relative WM-Width-Full">
<v-flex xs12 md3 sm3 v-for="(SelectBox , Key) in ArraySelectBox[0]" :key="Key" class="pb-4 ma-2 WM-Border WM-Border-Gray WM-BG-White WM-Width-Full WM-Relative">
<v-text-field
name="title"
label="Title"
color="black"
class="pa-2 Input"
v-model="SelectBox.value"
></v-text-field>
<v-btn
absolute
small
right
bottom
color="pink"
v-if="Key >= 1"
@click="RemoveInput('ArraySelectBox', 0, Key)"
>
<v-icon class="white--text mr-2 caption">fas fa-times</v-icon>
REMOVE</v-btn>
</v-flex>
</v-layout>
<v-btn
absolute
right
bottom
small
@click="InputDuplicate('ArraySelectBox', 0)"
color="black"
class="mb-2">
<v-icon class="white--text mr-2 caption">fas fa-plus</v-icon>
<span class="white--text">Add</span>
</v-btn>
</v-layout>
<!-- Checkbox Section -->
<v-layout row wrap class="pa-3 WM-Border WM-Border-Black WM-Relative WM-Width-Full" v-if="SelectedType[0] === 'checkbox'">
<v-layout row wrap class="WM-Width-Full WM-Relative">
<v-flex xs12 sm3 md3 v-for="(Checkbox , Key) in ArrayCheckBox[0]" :key="Key" class="pb-4 ma-2 WM-Border WM-Border-Gray WM-BG-White WM-Width-Full WM-Relative">
<v-text-field
name="title"
label="Title"
color="black"
class="pa-2 Input"
v-model="Checkbox.value"
></v-text-field>
<v-btn
absolute
small
right
bottom
@click="RemoveInput('ArrayCheckBox', 0, Key)"
v-if="Key >= 1"
color="pink">
<v-icon class="white--text mr-2 caption">fas fa-times</v-icon>
<span class="white--text">REMOVE</span>
</v-btn>
</v-flex>
</v-layout>
<v-btn
absolute
small
right
bottom
@click="InputDuplicate('ArrayCheckBox', 0)"
class="mb-2"
color="black">
<v-icon class="white--text mr-2 caption">fas fa-plus</v-icon>
<span class="white--text">Add</span>
</v-btn>
</v-layout>
<!-- Form Section -->
<v-layout row wrap v-if="SelectedType[0] === 'form'" class="pa-3 my-4 mx-3 WM-Border WM-Border-Black WM-Relative">
<v-layout row wrap v-for="(Div , ArrayDivKey) in ArrayDiv" :key="ArrayDivKey" class="pa-3 my-4 mx-3 WM-Border WM-Border-Gray WM-Color-LightGrey WM-Width-Full WM-Relative Form">
<v-flex xs12 md3 sm3>
<v-text-field
class="pa-2"
name="name"
label="Name"
id=""
></v-text-field>
</v-flex>
<v-flex xs12 md3 sm3>
<v-select
:items="Items[1]"
item-text="state"
item-value="abbr"
label="Type"
v-model="SelectedType[1][ArrayDivKey]"
single-line
color="black"
class="pa-2"
@change="DefaultValue(ArrayDivKey, SelectedType[1][ArrayDivKey])"
></v-select>
</v-flex>
<v-flex xs12 md3 sm3 v-if="SelectedType[1][ArrayDivKey] === 'text'">
<v-text-field
name="size"
label="Size"
color="black"
class="pa-2"
id="InputSize"
></v-text-field>
</v-flex>
<!-- Inner Form Selectbox Section -->
<v-layout row wrap class="pa-3 mb-3 WM-Border WM-Border-Black WM-Relative WM-Width-Full" v-if="SelectedType[1][ArrayDivKey] === 'select'" >
<v-layout row wrap class="WM-Relative WM-Width-Full">
<v-flex xs12 md3 sm3 v-for="(SelectBox , Key) in ArraySelectBox[ArrayDivKey]" :key="Key" class="pb-4 ma-2 WM-Border WM-Border-Gray WM-BG-White WM-Width-Full WM-Relative">
<v-text-field
name="title"
label="Title"
color="black"
class="pa-2 Input"
v-model="SelectBox.value"
id="value"
></v-text-field>
<v-btn
absolute
small
right
bottom
color="pink"
@click="RemoveInput('ArraySelectBox', ArrayDivKey, Key)"
v-if="Key >= 1"
>
<v-icon class="white--text mr-2 caption">fas fa-times</v-icon>
REMOVE</v-btn>
</v-flex>
</v-layout>
<v-btn
absolute
right
bottom
small
@click="InputDuplicate('ArraySelectBox', ArrayDivKey)"
color="black">
<v-icon class="white--text mr-2 caption">fas fa-plus</v-icon>
<span class="white--text">Add</span>
</v-btn>
</v-layout>
<!-- Inner Form Checkbox Section -->
<v-layout row wrap class="pa-3 mb-3 WM-Border WM-Border-Black WM-Relative WM-Width-Full" v-if="SelectedType[1][ArrayDivKey] === 'checkbox'" >
<v-layout row wrap class="WM-Relative WM-Width-Full">
<v-flex xs12 md3 sm3 v-if="Key >= 0" v-for="(CheckBox , Key) in ArrayCheckBox[ArrayDivKey]" :key="Key" class="pb-4 ma-2 WM-Border WM-Border-Gray WM-BG-White WM-Width-Full WM-Relative">
<v-text-field
name="title"
label="Title"
color="black"
class="pa-2 Input"
v-model="CheckBox.value"
id="value"
></v-text-field>
<v-btn
absolute
small
right
bottom
color="pink"
@click="RemoveInput('ArrayCheckBox', ArrayDivKey, Key)"
v-if="Key >= 1"
>
<v-icon class="white--text mr-2 caption">fas fa-times</v-icon>
REMOVE</v-btn>
</v-flex>
</v-layout>
<v-btn
absolute
right
bottom
small
@click="InputDuplicate('ArrayCheckBox', ArrayDivKey)"
color="black">
<v-icon class="white--text mr-2 caption">fas fa-plus</v-icon>
<span class="white--text">Add</span>
</v-btn>
</v-layout>
<v-btn
absolute
small
right
top
color="pink"
@click="Remove(ArrayDivKey)"
id="RemoveFormDuplicator"
>
<v-icon class="white--text mr-2 caption">fas fa-times</v-icon>
REMOVE</v-btn>
</v-layout>
<v-btn
absolute
small
right
bottom
color="cyan"
@click="Duplicator"
id="FormDuplicator"
>
<v-icon class="white--text mr-2 caption">fas fa-plus</v-icon>
ADD</v-btn>
</v-layout>
<v-btn
absolute
right
bottom
small
@click="InputDuplicate('ArrayForm', 0)"
color="pink"
class="mb-2">
<v-icon class="white--text mr-2 caption">fas fa-plus</v-icon>
<span class="white--text">Add</span>
</v-btn>
</v-layout>
<v-layout row wrap align-center justify-center class="mt-4">
<v-btn class="WM-CyanBlueGradient-BG" v-if="Hidden" style="padding:10px 60px">
<v-icon class="white--text mr-2 caption">fas fa-check</v-icon>
<span class="white--text">Generate Form</span>
</v-btn>
<router-link to="/dashboard">
<v-btn
class="WM-NoShadow WM-Outline-Btn WM-Border WM-Border-Black ml-5">
<v-icon class="black--text mr-2 caption">fas fa-chevron-left</v-icon>
<span class="black--text">Back</span>
</v-btn>
</router-link>
</v-layout>
</material-card>
</v-container>
</v-form>
</template>
<script>
export default {
name: "",
data () {
return {
SelectedType : {0 : 0, 1 : {}},
InputDuplicator : {0:0},
ArrayInput : [{value:''}],
ArraySelectBox : [],
ArrayCheckBox : [],
ArrayForm : [],
SelectBox : {},
CheckBox : {},
ArrayDiv : [0],
Hidden : false,
select: { state: 'Text', abbr: 'text' },
Items: [
[
{ state: 'Text', abbr: 'text' },
{ state: 'Checkbox', abbr: 'checkbox' },
{ state: 'Select', abbr: 'select' },
{ state: 'Form', abbr: 'form' },
],
[
{ state: 'Text', abbr: 'text' },
{ state: 'Checkbox', abbr: 'checkbox' },
{ state: 'Select', abbr: 'select' },
]
],
}
},
methods: {
Duplicator() {
this.ArrayDiv.push(this.ArrayDiv.length);
},
Remove (index) {
this.ArrayDiv.splice(index, 1);
},
RemoveInput (Type, ArrayDivindex, index) {
if (Type === 'ArraySelectBox') {
this.ArraySelectBox[ArrayDivindex].splice(index, 1);
this.CreateAgainArray(this.ArraySelectBox, 'ArraySelectBox');
}
else {
this.ArrayCheckBox[ArrayDivindex].splice(index, 1);
this.CreateAgainArray(this.ArrayCheckBox, 'ArrayCheckBox');
}
},
InputDuplicate (Type, ArrayDivindex) {
if (Type === 'ArraySelectBox') {
if (this.ArraySelectBox[ArrayDivindex] == undefined) {
this.ArraySelectBox[ArrayDivindex] = [];
}
this.ArraySelectBox[ArrayDivindex].push({value : ''});
this.CreateAgainArray(this.ArraySelectBox, 'ArraySelectBox');
}
else if(Type === 'ArrayCheckBox'){
if (this.ArrayCheckBox[ArrayDivindex] == undefined) {
this.ArrayCheckBox[ArrayDivindex] = [];
}
this.ArrayCheckBox[ArrayDivindex].push({value : ''});
this.CreateAgainArray(this.ArrayCheckBox, 'ArrayCheckBox');
}
else {
if (this.ArrayForm[ArrayDivindex] == undefined) {
this.ArrayForm[ArrayDivindex] = [];
}
else {
this.ArrayForm[ArrayDivindex].push({value : ''});
this.CreateAgainArray(this.ArrayForm, 'ArrayForm');
}
}
},
CreateAgainArray(arrayDiv, Type) {
let array = arrayDiv;
if (Type === 'ArraySelectBox') {
this.ArraySelectBox = [];
this.ArraySelectBox = array;
}
else if(Type === 'ArrayCheckBox'){
this.ArrayCheckBox = [];
this.ArrayCheckBox = array;
}
else {
this.ArrayForm = [];
this.ArrayForm = array;
}
},
DefaultValue(ArrayDivindex, SelectedType) {
this.Hidden = true;
if (SelectedType == 'select') {
if (this.ArraySelectBox[ArrayDivindex] == undefined) {
this.ArraySelectBox[ArrayDivindex] = [];
this.ArraySelectBox[ArrayDivindex].push({value : ''});
}
} else if(SelectedType == 'checkbox') {
if (this.ArrayCheckBox[ArrayDivindex] == undefined) {
this.ArrayCheckBox[ArrayDivindex] = [];
this.ArrayCheckBox[ArrayDivindex].push({value : ''});
}
}
}
}
}
</script>
<style lang="css" scoped>
.WM-Border-Gray {
border-color: #aaa !important;
}
.WM-Color-LightGrey {
background-color : #F5F5F5;
}
.v-btn--top.v-btn--absolute.v-btn--small {
top: -25px !important;
}
.v-btn--bottom.v-btn--absolute.v-btn--small {
bottom: -24px !important;
}
</style>
+106
View File
@@ -0,0 +1,106 @@
<template>
<v-container
fill-height
fluid
>
<v-layout
justify-center
align-center
>
<v-flex xs12>
<material-card
color="green"
title="Material Dashboard Heading"
text="Created using Roboto Font Family"
>
<v-card-text>
<h2 class="font-weight-light mb-4">Typography</h2>
<v-container
class="pa-0"
grid-list-xl
fluid
>
<v-layout
v-for="(t, i) in typography"
:key="i"
align-end
wrap
>
<v-flex
xs1
md3>
<span
class="tim-note"
v-text="t[0]"
/>
</v-flex>
<v-flex xs8>
<component
:is="t[2]"
:class="i"
>
<template v-if="i !== 'quote'">
{{ t[1] }}
</template>
<p v-if="i === 'quote'">{{ t[1] }}</p>
<small v-if="i === 'quote'">Kanye West, Musician</small>
<template v-if="i === 'small'">
<br>
<small>Use 'small' tag for the headers</small>
</template>
</component>
</v-flex>
</v-layout>
</v-container>
</v-card-text>
</material-card>
</v-flex>
</v-layout>
</v-container>
</template>
<script>
const leader = 'I will be the leader of a company that ends up being worth billions of dollars, because I got the answers. I understand culture. I am the nucleus. I think that’s a responsibility that I have, to push possibilities, to show people, this is the level that things could be at.'
const leaderShort = leader.slice(0, 105) + '...'
const material = 'The Life of Material Dashboard'
const small = 'Header with small subtitle'
export default {
data: () => ({
typography: {
'heading-1': ['Header 1', material, 'h1'],
'heading-2': ['Header 2', material, 'h2'],
'heading-3': ['Header 3', material, 'h3'],
'heading-4': ['Header 4', material, 'h4'],
'heading-5': ['Header 5', material, 'h5'],
'heading-6 text-uppercase': ['Header 6', material, 'h6'],
'': ['Paragraph', leader, 'p'],
'quote': ['Quote', leader, 'blockquote'],
'text--disabled': ['Muted Text', leaderShort, 'p'],
'text-primary': ['Primary Text', leaderShort, 'p'],
'text-info': ['Info Text', leaderShort, 'p'],
'text-success': ['Success Text', leaderShort, 'p'],
'text-warning': ['Warning Text', leaderShort, 'p'],
'text-danger': ['Danger Text', leaderShort, 'p'],
'small': ['Small Tag', small, 'h2']
}
})
}
</script>
<style lang="scss">
.tim-note {
bottom: 10px;
color: #c0c1c2;
display: block;
font-weight: 400;
font-size: 13px;
line-height: 13px;
left: 0;
margin-left: 20px;
width: 260px;
}
</style>
+87
View File
@@ -0,0 +1,87 @@
<template>
<v-container>
<v-layout justify-center>
<v-flex
xs12
sm10
md8
>
<material-card
color="primary"
title="Vue Material Dashboard PRO"
text="Are you looking for more components? Please check our Premium Version of Vue Material Dashboard."
>
<table class="v-table">
<thead>
<tr>
<th/>
<th class="subheading font-weight-light">Free</th>
<th class="subheading font-weight-light">PRO</th>
</tr>
</thead>
<tbody class="text-xs-center">
<tr>
<th class="text-xs-left font-weight-light subheading">Components</th>
<td>60</td>
<td>200</td>
</tr>
<tr>
<th class="text-xs-left font-weight-light subheading">Plugins</th>
<td>2</td>
<td>15</td>
</tr>
<tr>
<th class="text-xs-left font-weight-light subheading">Example Pages</th>
<td>3</td>
<td>27</td>
</tr>
<tr>
<th class="text-xs-left font-weight-light subheading">Login, Register, Pricing, Lock Pages</th>
<td>
<v-icon color="error">mdi-close</v-icon>
</td>
<td>
<v-icon color="success">mdi-check</v-icon>
</td>
</tr>
<tr>
<th class="text-xs-left font-weight-light subheading">Premium Support</th>
<td>
<v-icon color="error">mdi-close</v-icon>
</td>
<td>
<v-icon color="success">mdi-check</v-icon>
</td>
</tr>
<tr>
<th/>
<td>Free</td>
<td>Just $59</td>
</tr>
<tr>
<th/>
<td>
<v-btn
class="subheading white--text font-weight-light"
round
large
color="grey"
disabled
>Current Version</v-btn>
</td>
<td>
<v-btn
class="subheading white--text font-weight-light"
round
large
color="cyan"
>Upgrade to Pro</v-btn>
</td>
</tr>
</tbody>
</table>
</material-card>
</v-flex>
</v-layout>
</v-container>
</template>
+141
View File
@@ -0,0 +1,141 @@
<template>
<v-container
fill-height
fluid
grid-list-xl>
<v-layout
justify-center
wrap
>
<v-flex
xs12
md8
>
<material-card
color="green"
title="Edit Profile"
text="Complete your profile"
>
<v-form>
<v-container py-0>
<v-layout wrap>
<v-flex
xs12
md4
>
<v-text-field
label="Company (disabled)"
disabled/>
</v-flex>
<v-flex
xs12
md4
>
<v-text-field
class="purple-input"
label="User Name"
/>
</v-flex>
<v-flex
xs12
md4
>
<v-text-field
label="Email Address"
class="purple-input"/>
</v-flex>
<v-flex
xs12
md6
>
<v-text-field
label="First Name"
class="purple-input"/>
</v-flex>
<v-flex
xs12
md6
>
<v-text-field
label="Last Name"
class="purple-input"/>
</v-flex>
<v-flex
xs12
md12
>
<v-text-field
label="Adress"
class="purple-input"/>
</v-flex>
<v-flex
xs12
md4>
<v-text-field
label="City"
class="purple-input"/>
</v-flex>
<v-flex
xs12
md4>
<v-text-field
label="Country"
class="purple-input"/>
</v-flex>
<v-flex
xs12
md4>
<v-text-field
class="purple-input"
label="Postal Code"
type="number"/>
</v-flex>
<v-flex xs12>
<v-textarea
class="purple-input"
label="About Me"
value="Lorem ipsum dolor sit amet, consectetur adipiscing elit."
/>
</v-flex>
<v-flex
xs12
text-xs-right
>
<v-btn
class="mx-0 font-weight-light"
color="success"
>
Update Profile
</v-btn>
</v-flex>
</v-layout>
</v-container>
</v-form>
</material-card>
</v-flex>
<v-flex xs12 md4>
<material-card class="v-card-profile">
<v-avatar slot="offset" class="mx-auto d-block" size="130" >
<img src="/img/" >
</v-avatar>
<v-card-text class="text-xs-center">
<h6 class="category text-gray font-weight-thin mb-3">CEO / CO-FOUNDER</h6>
<h4 class="card-title font-weight-light">Alec Thompson</h4>
<p class="card-description font-weight-light">Don't be scared of the truth because we need to restart the human foundation in truth And I love you like Kanye loves Kanye I love Rick Owens’ bed design but the back is...</p>
<v-btn
color="success"
round
class="font-weight-light"
>Follow</v-btn>
</v-card-text>
</material-card>
</v-flex>
</v-layout>
</v-container>
</template>
<script>
export default {
//
}
</script>