Browse Source

初始化

master
cloud 2 years ago
parent
commit
fa2f1397b8
91 changed files with 6791 additions and 2 deletions
  1. +2
    -0
      .browserslistrc
  2. +5
    -0
      .editorconfig
  3. +2
    -0
      .env
  4. +14
    -0
      .eslintrc.js
  5. +25
    -0
      .gitignore
  6. +7
    -0
      CHANGELOG.md
  7. +13
    -0
      ISSUE_TEMPLATE.md
  8. +9
    -0
      LICENSE.md
  9. +249
    -2
      README.md
  10. +5
    -0
      babel.config.js
  11. +3
    -0
      cypress.json
  12. +30
    -0
      jest.config.js
  13. +3
    -0
      now.json
  14. +47
    -0
      package.json
  15. +5
    -0
      postcss.config.js
  16. BIN
      public/favicon.ico
  17. BIN
      public/favicon.png
  18. +36
    -0
      public/index.html
  19. +9
    -0
      src/App.vue
  20. BIN
      src/assets/clint-mckoy.jpg
  21. BIN
      src/assets/lock.jpg
  22. BIN
      src/assets/login.jpg
  23. BIN
      src/assets/logo.png
  24. BIN
      src/assets/pricing.jpg
  25. BIN
      src/assets/register.jpg
  26. +1
    -0
      src/assets/vuetify.svg
  27. +9
    -0
      src/components/base/Card.vue
  28. +69
    -0
      src/components/base/Item.vue
  29. +124
    -0
      src/components/base/ItemGroup.vue
  30. +25
    -0
      src/components/base/ItemSubGroup.vue
  31. +60
    -0
      src/components/base/MaterialAlert.vue
  32. +148
    -0
      src/components/base/MaterialCard.vue
  33. +95
    -0
      src/components/base/MaterialChartCard.vue
  34. +71
    -0
      src/components/base/MaterialSnackbar.vue
  35. +113
    -0
      src/components/base/MaterialStatsCard.vue
  36. +43
    -0
      src/components/base/MaterialTabs.vue
  37. +76
    -0
      src/components/base/MaterialTestimony.vue
  38. +34
    -0
      src/components/base/Subheading.vue
  39. +40
    -0
      src/components/base/VComponent.vue
  40. +19
    -0
      src/i18n.js
  41. +45
    -0
      src/locales/en.json
  42. +32
    -0
      src/main.js
  43. +17
    -0
      src/plugins/base.js
  44. +4
    -0
      src/plugins/chartist.js
  45. +22
    -0
      src/plugins/vee-validate.js
  46. +25
    -0
      src/plugins/vuetify.js
  47. +62
    -0
      src/router.js
  48. +47
    -0
      src/sass/overrides.sass
  49. +34
    -0
      src/sass/variables.scss
  50. +54
    -0
      src/sass/vuetify-material/_appbar.sass
  51. +67
    -0
      src/sass/vuetify-material/_buttons.sass
  52. +107
    -0
      src/sass/vuetify-material/_card.sass
  53. +9
    -0
      src/sass/vuetify-material/_chip.sass
  54. +29
    -0
      src/sass/vuetify-material/_footer.sass
  55. +3
    -0
      src/sass/vuetify-material/_map.sass
  56. +25
    -0
      src/sass/vuetify-material/_modal.sass
  57. +12
    -0
      src/sass/vuetify-material/_notification.sass
  58. +5
    -0
      src/sass/vuetify-material/_pagination.sass
  59. +36
    -0
      src/sass/vuetify-material/_settings.sass
  60. +68
    -0
      src/sass/vuetify-material/_sidebar.sass
  61. +12
    -0
      src/sass/vuetify-material/_tab.sass
  62. +22
    -0
      src/sass/vuetify-material/_table.sass
  63. +23
    -0
      src/sass/vuetify-material/_view.sass
  64. +23
    -0
      src/store.js
  65. +601
    -0
      src/views/dashboard/Dashboard.vue
  66. +28
    -0
      src/views/dashboard/Index.vue
  67. +131
    -0
      src/views/dashboard/Upgrade.vue
  68. +432
    -0
      src/views/dashboard/component/Buttons.vue
  69. +300
    -0
      src/views/dashboard/component/Grid.vue
  70. +301
    -0
      src/views/dashboard/component/Icons.vue
  71. +406
    -0
      src/views/dashboard/component/Notifications.vue
  72. +418
    -0
      src/views/dashboard/component/Tabs.vue
  73. +120
    -0
      src/views/dashboard/component/Typography.vue
  74. +183
    -0
      src/views/dashboard/components/core/AppBar.vue
  75. +235
    -0
      src/views/dashboard/components/core/Drawer.vue
  76. +78
    -0
      src/views/dashboard/components/core/Footer.vue
  77. +263
    -0
      src/views/dashboard/components/core/Settings.vue
  78. +17
    -0
      src/views/dashboard/components/core/View.vue
  79. +78
    -0
      src/views/dashboard/maps/GoogleMaps.vue
  80. +409
    -0
      src/views/dashboard/pages/Rtl.vue
  81. +134
    -0
      src/views/dashboard/pages/Timeline.vue
  82. +178
    -0
      src/views/dashboard/pages/UserProfile.vue
  83. +188
    -0
      src/views/dashboard/tables/RegularTables.vue
  84. +12
    -0
      tests/e2e/.eslintrc.js
  85. +24
    -0
      tests/e2e/plugins/index.js
  86. +8
    -0
      tests/e2e/specs/test.js
  87. +25
    -0
      tests/e2e/support/commands.js
  88. +20
    -0
      tests/e2e/support/index.js
  89. +5
    -0
      tests/unit/.eslintrc.js
  90. +7
    -0
      tests/unit/example.spec.js
  91. +16
    -0
      vue.config.js

+ 2
- 0
.browserslistrc View File

@ -0,0 +1,2 @@
> 1%
last 2 versions

+ 5
- 0
.editorconfig View File

@ -0,0 +1,5 @@
[*.{js,jsx,ts,tsx,vue}]
indent_style = space
indent_size = 2
trim_trailing_whitespace = true
insert_final_newline = true

+ 2
- 0
.env View File

@ -0,0 +1,2 @@
VUE_APP_I18N_LOCALE=en
VUE_APP_I18N_FALLBACK_LOCALE=en

+ 14
- 0
.eslintrc.js View File

@ -0,0 +1,14 @@
module.exports = {
root: true,
env: {
node: true,
},
extends: 'vuetify',
rules: {
'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off',
'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',
},
parserOptions: {
parser: 'babel-eslint',
},
}

+ 25
- 0
.gitignore View File

@ -0,0 +1,25 @@
.DS_Store
node_modules
/dist
package-lock.json
/tests/e2e/videos/
/tests/e2e/screenshots/
# local env files
.env.local
.env.*.local
# Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?

+ 7
- 0
CHANGELOG.md View File

@ -0,0 +1,7 @@
# Change Log
## [2.1.0] 2020-02-29
- refactor: all the product was changed and now it's the same version with PRO version and also the structure it's the same
## [1.0.0] 2018-10-16
### Initial Release

+ 13
- 0
ISSUE_TEMPLATE.md View File

@ -0,0 +1,13 @@
<!--
IMPORTANT: Please use the following link to create a new issue:
https://www.creative-tim.com/new-issue/vuetify-material-dashboard
**If your issue was not created using the app above, it will be closed immediately.**
-->
<!--
Love Creative Tim? Do you need Angular, React, Vuejs or HTML? You can visit:
👉 https://www.creative-tim.com/bundles
👉 https://www.creative-tim.com
-->

+ 9
- 0
LICENSE.md View File

@ -0,0 +1,9 @@
MIT License
Copyright (c) 2019 [Creative Tim](https://www.creative-tim.com)
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ 249
- 2
README.md View File

@ -1,3 +1,250 @@
# vuetify-demo
# [Vuetify Material Dashboard](https://www.creative-tim.com/product/vuetify-material-dashboard?ref=vtymdp-readme) [![Tweet](https://img.shields.io/twitter/url/http/shields.io.svg?style=social&logo=twitter)](https://twitter.com/share?url=https%3A%2F%2Fwww.creative-tim.com%2Fvuetify-material-dashboard&text=Vuetify%20Material%20Dashboard%20PRO%20by%20Creative%20Tim&via=CreativeTim&hashtags=vuejs%20%23vuex%20%23vuetify%20%23material)
vuetify 免费演示站
![version](https://img.shields.io/badge/version-2.1.0-blue.svg) [![GitHub issues open](https://img.shields.io/github/issues/creativetimofficial/ct-vuetify-material-dashboard.svg)](https://github.com/creativetimofficial/ct-vuetify-material-dashboard/issues?q=is%3Aopen+is%3Aissue) [![GitHub closed issues](https://img.shields.io/github/issues-closed-raw/creativetimofficial/ct-vuetify-material-dashboard.svg?maxAge=259200)](https://github.com/creativetimofficial/ct-vuetify-material-dashboard/issues?q=is%3Aissue+is%3Aclosed) [![Join the chat at https://gitter.im/NIT-dgp/General](https://badges.gitter.im/NIT-dgp/General.svg)](https://gitter.im/creative-tim/material-dashboard) [![Chat](https://img.shields.io/badge/chat-on%20discord-7289da.svg)](https://discord.gg/E4aHAQy)
![Product Gif](https://s3.amazonaws.com/creativetim_bucket/products/207/original/opt_mdp_vuetify_thumbnail.jpg?1566575158)
**Vuetify Material Dashboard** is a beautiful resource built over [Vuetify](https://vuetifyjs.com/en/), [Vuex](https://vuex.vuejs.org/installation.html) and [Vuejs](https://vuejs.org/). It will help you get started developing dashboards in no time. Vuetify Material Dashboard is the official Vuejs version of the Original [Material Dashboard PRO](https://www.creative-tim.com/product/material-dashboard). Using the Dashboard is pretty simple but requires basic knowledge of Javascript, [Vuejs](https://vuejs.org/v2/guide/) and [Vue-Router](https://router.vuejs.org/en/).
We have created it thinking about things you actually need in a dashboard. **Vuetify Material Dashboard** contains handpicked and optimized Vuejs plugins. Everything is designed to fit with one another. As you will be able to see, the dashboard you can access on [Creative Tim](https://www.creative-tim.com) is a customization of this product.
**Vuetify** is developed exactly according to Material Design spec. Every component is handcrafted to bring you the best possible UI tools to your next great app. The development doesn't stop at the core components outlined in Google's spec. Through the support of community members and sponsors, additional components will be designed and made available for everyone to enjoy.
**Vuex** is a state management pattern + library for **Vue.js** applications. It serves as a centralized store for all the components in an application, with rules ensuring that the state can only be mutated in a predictable fashion. It also integrates with Vue's official devtools extension to provide advanced features such as zero-config time-travel debugging and state snapshot export/import.
Let us know what you think and what we can improve below. And good luck with development!
## Getting Started
- Install Nodejs from [Nodejs Official Page](https://nodejs.org/en/)
- Open your terminal
- Navigate to the project
- Run `npm install` or `yarn install` if you use [Yarn](https://yarnpkg.com/en/)
- Run `npm run dev` or `yarn serve` to start a local development server
- A new tab will be opened in your browser
You can also run additional npm tasks such as
- `npm run build` to build your app for production
- `npm run lint` to run linting.
## Vuetify
Vuetify is developed exactly according to Material Design spec. Every component is hand crafted to bring you the best possible UI tools to your next great app. The development doesn't stop at the core components outlined in Google's spec. Through the support of community members and sponsors, additional components will be designed and made available for everyone to enjoy.
## Vuex
Vuex is a state management pattern + library for Vue.js applications. It serves as a centralized store for all the components in an application, with rules ensuring that the state can only be mutated in a predictable fashion. It also integrates with Vue's official [devtools](https://github.com/vuejs/vue-devtools) extension to provide advanced features such as zero-config time-travel debugging and state snapshot export / import.
## Vue-cli
We used the latest 3.x [Vue CLI](https://github.com/vuejs/vue-cli) which aims to reduce project configuration
to as little as possible. Almost everything is inside `package.json` + some other related files such as
`.babel.config.js`, `.eslintrc.js` and `.postcssrc.js`.
Let us know what you think and what we can improve below. And good luck with development!
#### Special thanks
During the development of this dashboard, we have used many existing resources from awesome developers. We want to thank them for providing their tools open source:
- [Vuetify](https://vuetifyjs.com/en/) for the wonderful framework
Let us know your thoughts below. And good luck with development!
## Table of Contents
* [Versions](#versions)
* [Demo](#demo)
* [Quick Start](#quick-start)
* [Documentation](#documentation)
* [File Structure](#file-structure)
* [Browser Support](#browser-support)
* [Resources](#resources)
* [Reporting Issues](#reporting-issues)
* [Technical Support or Questions](#technical-support-or-questions)
* [Licensing](#licensing)
* [Useful Links](#useful-links)
## Versions
[<img src="https://pbs.twimg.com/profile_images/900908683927982080/GWykKJ7r_400x400.jpg" width="60" height="60" />](https://www.creative-tim.com/product/vuetify-material-dashboard-pro?ref=vtymdp-readme)
[<img src="https://s3.amazonaws.com/creativetim_bucket/github/html.png" width="60" height="60" />](https://www.creative-tim.com/product/material-dashboard-pro?ref=vtymdp-readme)
[<img src="https://s3.amazonaws.com/creativetim_bucket/github/react.svg" width="60" height="60" />](https://www.creative-tim.com/product/material-dashboard-pro-react?ref=vtymdp-readme)
[<img src="https://s3.amazonaws.com/creativetim_bucket/github/vuejs.png" width="60" height="60" />](https://www.creative-tim.com/product/vue-material-dashboard-pro?ref=vtymdp-readme)
[<img src="https://s3.amazonaws.com/creativetim_bucket/github/angular.png" width="60" height="60" />](https://www.creative-tim.com/product/material-dashboard-pro-angular2?ref=vtymdp-readme)
Vuetify | Vue | React | Angular | HTML |
| --- | --- | --- | --- | --- |
| [![Vuetify Material Dashboard PRO](https://s3.amazonaws.com/creativetim_bucket/products/207/original/opt_mdp_vuetify_thumbnail.jpg)](https://www.creative-tim.com/product/vuetify-material-dashboard-pro?ref=vtymdp-readme) | [![Vue Material Dashboard PRO](https://s3.amazonaws.com/creativetim_bucket/products/87/original/opt_mdp_vue_thumbnail.jpg)](https://www.creative-tim.com/product/vue-material-dashboard-pro?ref=vtymdp-readme) | [![Material Dashboard PRO React](https://s3.amazonaws.com/creativetim_bucket/products/80/original/opt_mdp_react_thumbnail.jpg)](https://www.creative-tim.com/product/material-dashboard-pro-react?ref=vtymdp-readme) | [![Material Dashboard PRO Angular](https://s3.amazonaws.com/creativetim_bucket/products/55/original/opt_mdp_angular_thumbnail.jpg)](https://www.creative-tim.com/product/material-dashboard-angular2?ref=vtymdp-readme) | [![Material Dashboard PRO HTML](https://s3.amazonaws.com/creativetim_bucket/products/51/original/opt_mdp_thumbnail.jpg)](https://www.creative-tim.com/product/material-dashboard-pro/examples/dashboard.html?ref=vtymdp-readme)
## Demo
- [Start page](https://demos.creative-tim.com/vuetify-material-dashboard?ref=vtymdp-readme)
- [Notifications page](https://demos.creative-tim.com/vuetify-material-dashboard/#/components/notifications?ref=vtymdp-readme)
[View More](https://demos.creative-tim.com/vuetify-material-dashboard-pro?ref=vtymdp-readme).
## Quick start
Quick start options:
- Download from [Creative Tim](https://www.creative-tim.com/product/vuetify-material-dashboard?ref=vtymdp-readme)
## Documentation
The documentation for the **Vuetify Material Dashboard** is hosted on vuetify [website](https://vuetifyjs.com/en/components/api-explorer).
## File Structure
Within the download you'll find the following directories and files:
```
vuetify-material-dashboard
├── README.md
├── CHANGELOG.md
├── babel.config.js
├── cypress.json
├── jest.config.js
├── now.json
├── package.json
├── postcss.config.js
├── public
│   ├── favicon.ico
│   └── index.html
├── src
│   ├── App.vue
│   ├── assets
│   │   └── vuetify.svg
│   ├── components
│   │   └── base
│   │   ├── Card.vue
│   │   ├── Item.vue
│   │   ├── ItemGroup.vue
│   │   ├── ItemSubGroup.vue
│   │   ├── MaterialAlert.vue
│   │   ├── MaterialCard.vue
│   │   ├── MaterialChartCard.vue
│   │   ├── MaterialSnackbar.vue
│   │   ├── MaterialStatsCard.vue
│   │   ├── MaterialTabs.vue
│   │   ├── MaterialTestimony.vue
│   │   ├── Subheading.vue
│   │   └── VComponent.vue
│   ├── i18n.js
│   ├── locales
│   │   └── en.json
│   ├── main.js
│   ├── plugins
│   │   ├── base.js
│   │   ├── chartist.js
│   │   ├── vee-validate.js
│   │   └── vuetify.js
│   ├── router.js
│   ├── sass
│   │   ├── main.scss
│   │   ├── overrides.sass
│   │   └── vuetify-material
│   │   └── _sidebar.sass
│   ├── store.js
│   └── views
│   └── dashboard
│      ├── Charts.vue
│      ├── Dashboard.vue
│      ├── Index.vue
│      ├── Widgets.vue
│      ├── component
│      │   ├── Buttons.vue
│      │   ├── Grid.vue
│      │   ├── Icons.vue
│      │   ├── Notifications.vue
│      │   ├── Tabs.vue
│      │   └── Typography.vue
│      ├── components
│      │   └── core
│      │   ├── AppBar.vue
│      │   ├── Drawer.vue
│      │   ├── Footer.vue
│      │   ├── Settings.vue
│      │   └── View.vue
│      ├── maps
│      │   └── GoogleMaps.vue
│      ├── pages
│      │   └── UserProfile.vue
│      └── tables
│      └── RegularTables.vue
├── tests
│   ├── e2e
│   │   ├── plugins
│   │   │   └── index.js
│   │   ├── specs
│   │   │   └── test.js
│   │   └── support
│   │   ├── commands.js
│   │   └── index.js
│   └── unit
│   └── example.spec.js
├── vue.config.js
```
## Browser Support
At present, we officially aim to support the last two versions of the following browsers:
<img src="https://s3.amazonaws.com/creativetim_bucket/github/browser/chrome.png" width="64" height="64"> <img src="https://s3.amazonaws.com/creativetim_bucket/github/browser/firefox.png" width="64" height="64"> <img src="https://s3.amazonaws.com/creativetim_bucket/github/browser/edge.png" width="64" height="64"> <img src="https://s3.amazonaws.com/creativetim_bucket/github/browser/safari.png" width="64" height="64"> <img src="https://s3.amazonaws.com/creativetim_bucket/github/browser/opera.png" width="64" height="64">
## Resources
- [Live Preview](https://demos.creative-tim.com/vuetify-material-dashboard?ref=vtymdp-readme)
- Download Page: [Download](https://www.creative-tim.com/product/vuetify-material-dashboard?ref=vtymdp-readme)
- Documentation is [Here](https://vuetifyjs.com/en/components/api-explorer)
- License Agreement: [License](https://www.creative-tim.com/license)
- Support: [Contact](https://www.creative-tim.com/contact-us)
- Issues: [Github Issues Page](https://github.com/creativetimofficial/ct-vuetify-material-dashboard/issues)
- Vue Material Dashboard PRO - [Demo](https://www.creative-tim.com/product/vue-material-dashboard-pro?ref=vtymdp-readme)
- For Front End Development - [Material Kit Pro ](https://www.creative-tim.com/product/material-kit-pro?ref=vtymdp-readme)
## Reporting Issues
We use GitHub Issues as the official bug tracker for the **Vuetify Material Dashboard**. Here are some advices for our users that want to report an issue:
1. Make sure that you are using the latest version of the **Vuetify Material Dashboard**. Check the **CHANGELOG** from your dashboard on our [website](https://www.creative-tim.com/).
2. Providing us reproducible steps for the issue will shorten the time it takes for it to be fixed.
3. Some issues may be browser specific, so specifying in what browser you encountered the issue might help.
## Technical Support or Questions
If you have questions or need help integrating the product please [contact us](https://www.creative-tim.com/contact-us) instead of opening an issue.
## Licensing
- Copyright 2018 Creative Tim (https://www.creative-tim.com)
- Creative Tim [license](https://www.creative-tim.com/license)
## Useful Links
- [More products](https://www.creative-tim.com/bootstrap-themes) from Creative Tim
- [Vue products](https://www.creative-tim.com/bootstrap-themes/vuejs-themes) from Creative Tim
- [Tutorials](https://www.youtube.com/channel/UCVyTG4sCw-rOvB9oHkzZD1w)
- [Freebies](https://www.creative-tim.com/bootstrap-themes/free) from Creative Tim
- [Affiliate Program](https://www.creative-tim.com/affiliates/new) (earn money)
##### Social Media
Twitter: <https://twitter.com/CreativeTim>
Facebook: <https://www.facebook.com/CreativeTim>
Dribbble: <https://dribbble.com/creativetim>
Google+: <https://plus.google.com/+CreativetimPage>
Instagram: <https://instagram.com/creativetimofficial>

+ 5
- 0
babel.config.js View File

@ -0,0 +1,5 @@
module.exports = {
presets: [
'@vue/app',
],
}

+ 3
- 0
cypress.json View File

@ -0,0 +1,3 @@
{
"pluginsFile": "tests/e2e/plugins/index.js"
}

+ 30
- 0
jest.config.js View File

@ -0,0 +1,30 @@
module.exports = {
moduleFileExtensions: [
'js',
'jsx',
'json',
'vue',
],
transform: {
'^.+\\.vue$': 'vue-jest',
'.+\\.(css|styl|less|sass|scss|svg|png|jpg|ttf|woff|woff2)$': 'jest-transform-stub',
'^.+\\.jsx?$': 'babel-jest',
},
transformIgnorePatterns: [
'/node_modules/',
],
moduleNameMapper: {
'^@/(.*)$': '<rootDir>/src/$1',
},
snapshotSerializers: [
'jest-serializer-vue',
],
testMatch: [
'**/tests/unit/**/*.spec.(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx)',
],
testURL: 'http://localhost/',
watchPlugins: [
'jest-watch-typeahead/filename',
'jest-watch-typeahead/testname',
],
}

+ 3
- 0
now.json View File

@ -0,0 +1,3 @@
{
"version": 2
}

+ 47
- 0
package.json View File

@ -0,0 +1,47 @@
{
"name": "vuetify-material-dashboard",
"version": "2.1.0",
"private": true,
"scripts": {
"dev": "vue-cli-service serve --open",
"serve": "vue-cli-service serve",
"build": "vue-cli-service build",
"lint": "vue-cli-service lint",
"i18n:report": "vue-cli-service i18n:report --src './src/**/*.?(js|vue)' --locales './src/locales/**/*.json'",
"now-start": "vue-cli-service serve",
"test:e2e": "vue-cli-service test:e2e",
"test:unit": "vue-cli-service test:unit"
},
"dependencies": {
"core-js": "^3.6.2",
"vue": "^2.6.11",
"vue-i18n": "^8.15.3",
"vue-router": "^3.1.3",
"vuetify": "^2.2.11",
"vuex": "^3.1.2"
},
"devDependencies": {
"@vue/cli-plugin-babel": "^4.1.2",
"@vue/cli-plugin-e2e-cypress": "^4.1.2",
"@vue/cli-plugin-eslint": "^4.1.2",
"@vue/cli-plugin-unit-jest": "^4.1.2",
"@vue/cli-service": "^4.1.2",
"@vue/eslint-config-standard": "^5.0.1",
"@vue/test-utils": "1.0.0-beta.30",
"babel-core": "7.0.0-bridge.0",
"babel-eslint": "^10.0.3",
"babel-jest": "^24.9.0",
"eslint": "^6.8.0",
"eslint-config-vuetify": "^0.4.1",
"eslint-plugin-vue": "^6.1.2",
"sass": "^1.24.3",
"sass-loader": "^8.0.0",
"vee-validate": "^3.2.2",
"vue-chartist": "^2.2.1",
"vue-cli-plugin-i18n": "^0.6.0",
"vue-cli-plugin-vuetify": "^2.0.3",
"vue-template-compiler": "^2.6.11",
"vue-world-map": "^0.1.1",
"vuetify-loader": "^1.4.3"
}
}

+ 5
- 0
postcss.config.js View File

@ -0,0 +1,5 @@
module.exports = {
plugins: {
autoprefixer: {},
},
}

BIN
public/favicon.ico View File

Before After

BIN
public/favicon.png View File

Before After
Width: 96  |  Height: 96  |  Size: 2.7 KiB

+ 36
- 0
public/index.html View File

@ -0,0 +1,36 @@
<!--
=========================================================
* Vuetify Material Dashboard - v2.1.0
=========================================================
* Product Page: https://www.creative-tim.com/product/vuetify-material-dashboard
* Copyright 2019 Creative Tim (https://www.creative-tim.com)
* Coded by Creative Tim
=========================================================
* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<link rel="icon" href="<%= BASE_URL %>favicon.png">
<title>Vuetify Material Dashboard - by Creative Tim</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@mdi/font@latest/css/materialdesignicons.min.css">
</head>
<body>
<noscript>
<strong>We're sorry but material doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
</noscript>
<div id="app"></div>
<!-- built files will be auto injected -->
</body>
</html>

+ 9
- 0
src/App.vue View File

@ -0,0 +1,9 @@
<template>
<router-view />
</template>
<script>
export default {
name: 'App',
}
</script>

BIN
src/assets/clint-mckoy.jpg View File

Before After
Width: 1920  |  Height: 1281  |  Size: 170 KiB

BIN
src/assets/lock.jpg View File

Before After
Width: 2880  |  Height: 1864  |  Size: 808 KiB

BIN
src/assets/login.jpg View File

Before After
Width: 2880  |  Height: 1920  |  Size: 362 KiB

BIN
src/assets/logo.png View File

Before After
Width: 200  |  Height: 200  |  Size: 6.7 KiB

BIN
src/assets/pricing.jpg View File

Before After
Width: 2880  |  Height: 1920  |  Size: 637 KiB

BIN
src/assets/register.jpg View File

Before After
Width: 2880  |  Height: 1924  |  Size: 465 KiB

+ 1
- 0
src/assets/vuetify.svg View File

@ -0,0 +1 @@
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 87.5 100"><defs><style>.cls-1{fill:#1697f6;}.cls-2{fill:#7bc6ff;}.cls-3{fill:#aeddff;}</style></defs><title>Artboard 47</title><polyline class="cls-1" points="43.75 0 23.31 0 43.75 48.32"/><polygon class="cls-2" points="43.75 62.5 43.75 100 0 14.58 22.92 14.58 43.75 62.5"/><polyline class="cls-2" points="43.75 0 64.19 0 43.75 48.32"/><polygon class="cls-3" points="64.58 14.58 87.5 14.58 43.75 100 43.75 62.5 64.58 14.58"/></svg>

+ 9
- 0
src/components/base/Card.vue View File

@ -0,0 +1,9 @@
<script>
import { VCard } from 'vuetify/lib'
export default {
name: 'Card',
extends: VCard,
}
</script>

+ 69
- 0
src/components/base/Item.vue View File

@ -0,0 +1,69 @@
<template>
<v-list-item
:href="href"
:rel="href && href !== '#' ? 'noopener' : undefined"
:target="href && href !== '#' ? '_blank' : undefined"
:to="item.to"
:active-class="`primary ${!isDark ? 'black' : 'white'}--text`"
>
<v-list-item-icon
v-if="text"
class="v-list-item__icon--text"
v-text="computedText"
/>
<v-list-item-icon v-else-if="item.icon">
<v-icon v-text="item.icon" />
</v-list-item-icon>
<v-list-item-content v-if="item.title || item.subtitle">
<v-list-item-title v-text="item.title" />
<v-list-item-subtitle v-text="item.subtitle" />
</v-list-item-content>
</v-list-item>
</template>
<script>
import Themeable from 'vuetify/lib/mixins/themeable'
export default {
name: 'Item',
mixins: [Themeable],
props: {
item: {
type: Object,
default: () => ({
href: undefined,
icon: undefined,
subtitle: undefined,
title: undefined,
to: undefined,
}),
},
text: {
type: Boolean,
default: false,
},
},
computed: {
computedText () {
if (!this.item || !this.item.title) return ''
let text = ''
this.item.title.split(' ').forEach(val => {
text += val.substring(0, 1)
})
return text
},
href () {
return this.item.href || (!this.item.to ? '#' : undefined)
},
},
}
</script>

+ 124
- 0
src/components/base/ItemGroup.vue View File

@ -0,0 +1,124 @@
<template>
<v-list-group
:group="group"
:prepend-icon="item.icon"
:sub-group="subGroup"
append-icon="mdi-menu-down"
:color="barColor !== 'rgba(255, 255, 255, 1), rgba(255, 255, 255, 0.7)' ? 'white' : 'grey darken-1'"
>
<template v-slot:activator>
<v-list-item-icon
v-if="text"
class="v-list-item__icon--text"
v-text="computedText"
/>
<v-list-item-avatar
v-else-if="item.avatar"
class="align-self-center"
color="white"
contain
>
<v-img src="https://demos.creative-tim.com/vuetify-material-dashboard/favicon.ico" />
</v-list-item-avatar>
<v-list-item-content>
<v-list-item-title v-text="item.title" />
</v-list-item-content>
</template>
<template v-for="(child, i) in children">
<base-item-sub-group
v-if="child.children"
:key="`sub-group-${i}`"
:item="child"
/>
<base-item
v-else
:key="`item-${i}`"
:item="child"
text
/>
</template>
</v-list-group>
</template>
<script>
// Utilities
import kebabCase from 'lodash/kebabCase'
import { mapState } from 'vuex'
export default {
name: 'ItemGroup',
inheritAttrs: false,
props: {
item: {
type: Object,
default: () => ({
avatar: undefined,
group: undefined,
title: undefined,
children: [],
}),
},
subGroup: {
type: Boolean,
default: false,
},
text: {
type: Boolean,
default: false,
},
},
computed: {
...mapState(['barColor']),
children () {
return this.item.children.map(item => ({
...item,
to: !item.to ? undefined : `${this.item.group}/${item.to}`,
}))
},
computedText () {
if (!this.item || !this.item.title) return ''
let text = ''
this.item.title.split(' ').forEach(val => {
text += val.substring(0, 1)
})
return text
},
group () {
return this.genGroup(this.item.children)
},
},
methods: {
genGroup (children) {
return children
.filter(item => item.to)
.map(item => {
const parent = item.group || this.item.group
let group = `${parent}/${kebabCase(item.to)}`
if (item.children) {
group = `${group}|${this.genGroup(item.children)}`
}
return group
}).join('|')
},
},
}
</script>
<style>
.v-list-group__activator p {
margin-bottom: 0;
}
</style>

+ 25
- 0
src/components/base/ItemSubGroup.vue View File

@ -0,0 +1,25 @@
<template>
<base-item-group
:item="item"
text
sub-group
/>
</template>
<script>
export default {
name: 'ItemSubGroup',
props: {
item: {
type: Object,
default: () => ({
avatar: undefined,
group: undefined,
title: undefined,
children: [],
}),
},
},
}
</script>

+ 60
- 0
src/components/base/MaterialAlert.vue View File

@ -0,0 +1,60 @@
<template>
<v-alert
v-bind="$attrs"
class="v-alert--material"
dark
v-on="$listeners"
>
<template
v-if="$attrs.icon"
v-slot:prepend
>
<v-icon
class="v-alert__icon elevation-6 white"
light
:color="$attrs.color"
>
{{ $attrs.icon }}
</v-icon>
</template>
<slot />
<template
v-if="$attrs.dismissible"
v-slot:close="{ toggle }"
>
<v-btn
:aria-label="$vuetify.lang.t('$vuetify.close')"
color
icon
small
@click="toggle"
>
<v-icon>
$vuetify.icons.cancel
</v-icon>
</v-btn>
</template>
</v-alert>
</template>
<script>
export default {
name: 'MaterialAlert',
}
</script>
<style lang="sass">
.v-alert--material
margin-top: 32px
.v-alert__icon
top: -36px
.v-alert__dismissible
align-self: flex-start
margin: 0 !important
padding: 0 !important
</style>

+ 148
- 0
src/components/base/MaterialCard.vue View File

@ -0,0 +1,148 @@
<template>
<v-card
v-bind="$attrs"
:class="classes"
class="v-card--material pa-3"
>
<div class="d-flex grow flex-wrap">
<v-avatar
v-if="avatar"
size="128"
class="mx-auto v-card--material__avatar elevation-6"
color="grey"
>
<v-img :src="avatar" />
</v-avatar>
<v-sheet
v-else
:class="{
'pa-7': !$slots.image
}"
:color="color"
:max-height="icon ? 90 : undefined"
:width="icon ? 'auto' : '100%'"
elevation="6"
class="text-start v-card--material__heading mb-n6"
dark
>
<slot
v-if="$slots.heading"
name="heading"
/>
<slot
v-else-if="$slots.image"
name="image"
/>
<div
v-else-if="title && !icon"
class="display-1 font-weight-light"
v-text="title"
/>
<v-icon
v-else-if="icon"
size="32"
v-text="icon"
/>
<div
v-if="text"
class="headline font-weight-thin"
v-text="text"
/>
</v-sheet>
<div
v-if="$slots['after-heading']"
class="ml-6"
>
<slot name="after-heading" />
</div>
<div
v-else-if="icon && title"
class="ml-4"
>
<div
class="card-title font-weight-light"
v-text="title"
/>
</div>
</div>
<slot />
<template v-if="$slots.actions">
<v-divider class="mt-2" />
<v-card-actions class="pb-0">
<slot name="actions" />
</v-card-actions>
</template>
</v-card>
</template>
<script>
export default {
name: 'MaterialCard',
props: {
avatar: {
type: String,
default: '',
},
color: {
type: String,
default: 'success',
},
icon: {
type: String,
default: undefined,
},
image: {
type: Boolean,
default: false,
},
text: {
type: String,
default: '',
},
title: {
type: String,
default: '',
},
},
computed: {
classes () {
return {
'v-card--material--has-heading': this.hasHeading,
}
},
hasHeading () {
return Boolean(this.$slots.heading || this.title || this.icon)
},
hasAltHeading () {
return Boolean(this.$slots.heading || (this.title && this.icon))
},
},
}
</script>
<style lang="sass">
.v-card--material
&__avatar
position: relative
top: -64px
margin-bottom: -32px
&__heading
position: relative
top: -40px
transition: .3s ease
z-index: 1
</style>

+ 95
- 0
src/components/base/MaterialChartCard.vue View File

@ -0,0 +1,95 @@
<template>
<base-material-card
class="v-card--material-chart"
v-bind="$attrs"
v-on="$listeners"
>
<template v-slot:heading>
<chartist
:data="data"
:event-handlers="eventHandlers"
:options="options"
:ratio="ratio"
:responsive-options="responsiveOptions"
:type="type"
style="max-height: 150px;"
/>
</template>
<slot
slot="reveal-actions"
name="reveal-actions"
/>
<slot />
<slot
slot="actions"
name="actions"
/>
</base-material-card>
</template>
<script>
export default {
name: 'MaterialChartCard',
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="sass">
.v-card--material-chart
p
color: #999
.v-card--material__heading
max-height: 185px
.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>

+ 71
- 0
src/components/base/MaterialSnackbar.vue View File

@ -0,0 +1,71 @@
<template>
<v-snackbar
v-model="internalValue"
class="v-snackbar--material"
v-bind="{
...$attrs,
'color': 'transparent'
}"
>
<base-material-alert
v-model="internalValue"
:color="$attrs.color"
:dismissible="dismissible"
:type="type"
class="ma-0"
dark
>
<slot />
</base-material-alert>
</v-snackbar>
</template>
<script>
export default {
name: 'BaseMaterialSnackbar',
props: {
dismissible: {
type: Boolean,
default: true,
},
type: {
type: String,
default: '',
},
value: Boolean,
},
data () {
return {
internalValue: this.value,
}
},
watch: {
internalValue (val, oldVal) {
if (val === oldVal) return
this.$emit('input', val)
},
value (val, oldVal) {
if (val === oldVal) return
this.internalValue = val
},
},
}
</script>
<style lang="sass">
.v-snackbar--material
margin-top: 32px
margin-bottom: 32px
.v-alert--material,
.v-snack__wrapper
border-radius: 4px
.v-snack__content
overflow: visible
padding: 0
</style>

+ 113
- 0
src/components/base/MaterialStatsCard.vue View File

@ -0,0 +1,113 @@
<template>
<base-material-card
:icon="icon"
class="v-card--material-stats"
v-bind="$attrs"
v-on="$listeners"
>
<template v-slot:after-heading>
<div class="ml-auto text-right">
<div
class="body-3 grey--text font-weight-light"
v-text="title"
/>
<h3 class="display-2 font-weight-light text--primary">
{{ value }} <small>{{ smallValue }}</small>
</h3>
</div>
</template>
<v-col
cols="12"
class="px-0"
>
<v-divider />
</v-col>
<v-icon
:color="subIconColor"
size="16"
class="ml-2 mr-1"
>
{{ subIcon }}
</v-icon>
<span
:class="subTextColor"
class="caption grey--text font-weight-light"
v-text="subText"
/>
</base-material-card>
</template>
<script>
import Card from './Card'
export default {
name: 'MaterialStatsCard',
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="sass">
.v-card--material-stats
display: flex
flex-wrap: wrap
position: relative
> div:first-child
justify-content: space-between
.v-card
border-radius: 4px
flex: 0 1 auto
.v-card__text
display: inline-block
flex: 1 0 calc(100% - 120px)
position: absolute
top: 0
right: 0
width: 100%
.v-card__actions
flex: 1 0 100%
</style>

+ 43
- 0
src/components/base/MaterialTabs.vue View File

@ -0,0 +1,43 @@
<template>
<v-tabs
v-model="internalValue"
:active-class="`${color} ${$vuetify.theme.dark ? 'black' : 'white'}--text`"
class="v-tabs--pill"
hide-slider
v-bind="$attrs"
>
<slot />
<slot name="items" />
</v-tabs>
</template>
<script>
// Mixins
import Proxyable from 'vuetify/lib/mixins/proxyable'
export default {
name: 'MaterialTabs',
mixins: [Proxyable],
props: {
color: {
type: String,
default: 'primary',
},
},
}
</script>
<style lang="sass">
.v-tabs--pill
.v-tab,
.v-tab:before
border-radius: 24px
&.v-tabs--icons-and-text
.v-tab,
.v-tab:before
border-radius: 4px
</style>

+ 76
- 0
src/components/base/MaterialTestimony.vue View File

@ -0,0 +1,76 @@
<template>
<v-card class="text-center v-card--testimony">
<div class="pt-6">
<v-icon
color="black"
x-large
>
mdi-format-quote-close
</v-icon>
</div>
<v-card-text
class="display-1 font-weight-light font-italic mb-3"
v-text="blurb"
/>
<div
class="display-2 font-weight-light mb-2"
v-text="author"
/>
<div
class="body-2 text-uppercase grey--text"
v-text="handle"
/>
<v-avatar
class="elevation-12"
color="grey"
size="100"
>
<v-img
:alt="`${author} Testimonial`"
:src="avatar"
/>
</v-avatar>
<div />
</v-card>
</template>
<script>
export default {
name: 'BaseMaterialTestimony',
props: {
author: {
type: String,
default: '',
},
avatar: {
type: String,
default: 'https://demos.creative-tim.com/material-dashboard/assets/img/faces/card-profile1-square.jpg',
},
blurb: {
type: String,
default: '',
},
handle: {
type: String,
default: '',
},
},
}
</script>
<style lang="sass">
.v-card--testimony
padding-bottom: 72px
margin-bottom: 64px
.v-avatar
position: absolute
left: calc(50% - 64px)
top: calc(100% - 64px)
</style>

+ 34
- 0
src/components/base/Subheading.vue View File

@ -0,0 +1,34 @@
<template>
<div class="display-2 font-weight-light col col-12 text-left text--primary pa-0 mb-8">
<h5 class="font-weight-light">
{{ subheading }}
<template v-if="text">
<span
class="subtitle-1"
v-text="text"
/>
</template>
</h5>
<div class="pt-2">
<slot />
</div>
</div>
</template>
<script>
export default {
name: 'Subheading',
props: {
subheading: {
type: String,
default: '',
},
text: {
type: String,
default: '',
},
},
}
</script>

+ 40
- 0
src/components/base/VComponent.vue View File

@ -0,0 +1,40 @@
<template>
<section class="mb-12 text-center">
<h1
class="font-weight-light mb-2 headline"
v-text="`Vuetify ${heading}`"
/>
<span
class="font-weight-light subtitle-1"
>
Please checkout the
<a
:href="`https://vuetifyjs.com/${link}`"
rel="noopener"
target="_blank"
class="secondary--text"
style="text-decoration:none;"
>
full documentation
</a>
</span>
</section>
</template>
<script>
export default {
name: 'VComponent',
props: {
heading: {
type: String,
default: '',
},
link: {
type: String,
default: '',
},
},
}
</script>

+ 19
- 0
src/i18n.js View File

@ -0,0 +1,19 @@
import Vue from 'vue'
import VueI18n from 'vue-i18n'
import en from 'vuetify/lib/locale/en'
Vue.use(VueI18n)
const messages = {
en: {
...require('@/locales/en.json'),
$vuetify: en,
},
}
export default new VueI18n({
locale: process.env.VUE_APP_I18N_LOCALE || 'en',
fallbackLocale: process.env.VUE_APP_I18N_FALLBACK_LOCALE || 'en',
messages,
})

+ 45
- 0
src/locales/en.json View File

@ -0,0 +1,45 @@
{
"avatar": "Vuetify MD",
"buttons": "Buttons",
"calendar": "Calendar",
"charts": "Charts",
"components": "Components",
"ct": "CT",
"dashboard": "Dashboard",
"dtables": "Data Tables",
"eforms": "Extended Forms",
"error": "Error Page",
"etables": "Extended Tables",
"example": "Example",
"forms": "Forms",
"fullscreen": "Full Screen Map",
"google": "Google Maps",
"grid": "Grid System",
"icons": "Icons",
"lock": "Lock Screen Page",
"login": "Login Page",
"maps": "Maps",
"multi": "Multi Level Collapse",
"notifications": "Notifications",
"pages": "Pages",
"plan": "Choose Plan",
"pricing": "Pricing",
"my-profile": "My Profile",
"edit-profile": "Edit Profile",
"register": "Register Page",
"rforms": "Regular Forms",
"rtables": "Regular Tables",
"rtl": "RTL Support",
"search": "Search",
"settings": "Settings",
"tables": "Tables",
"tabs": "Tabs",
"tim": "Creative Tim",
"timeline": "Timeline",
"typography": "Typography",
"upgrade": "Upgrade To PRO",
"user": "User Profile",
"vforms": "Validation Forms",
"widgets": "Widgets",
"wizard": "Wizard"
}

+ 32
- 0
src/main.js View File

@ -0,0 +1,32 @@
// =========================================================
// * Vuetify Material Dashboard - v2.1.0
// =========================================================
//
// * Product Page: https://www.creative-tim.com/product/vuetify-material-dashboard
// * Copyright 2019 Creative Tim (https://www.creative-tim.com)
//
// * Coded by Creative Tim
//
// =========================================================
//
// * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
import './plugins/base'
import './plugins/chartist'
import './plugins/vee-validate'
import vuetify from './plugins/vuetify'
import i18n from './i18n'
Vue.config.productionTip = false
new Vue({
router,
store,
vuetify,
i18n,
render: h => h(App),
}).$mount('#app')

+ 17
- 0
src/plugins/base.js View File

@ -0,0 +1,17 @@
import Vue from 'vue'
import upperFirst from 'lodash/upperFirst'
import camelCase from 'lodash/camelCase'
const requireComponent = require.context(
'@/components/base', true, /\.vue$/,
)
requireComponent.keys().forEach(fileName => {
const componentConfig = requireComponent(fileName)
const componentName = upperFirst(
camelCase(fileName.replace(/^\.\//, '').replace(/\.\w+$/, '')),
)
Vue.component(`Base${componentName}`, componentConfig.default || componentConfig)
})

+ 4
- 0
src/plugins/chartist.js View File

@ -0,0 +1,4 @@
import Vue from 'vue'
import 'chartist/dist/chartist.min.css'
Vue.use(require('vue-chartist'))

+ 22
- 0
src/plugins/vee-validate.js View File

@ -0,0 +1,22 @@
import Vue from 'vue'
import {
extend,
ValidationObserver,
ValidationProvider,
} from 'vee-validate'
import {
email,
max,
min,
numeric,
required,
} from 'vee-validate/dist/rules'
extend('email', email)
extend('max', max)
extend('min', min)
extend('numeric', numeric)
extend('required', required)
Vue.component('validation-provider', ValidationProvider)
Vue.component('validation-observer', ValidationObserver)

+ 25
- 0
src/plugins/vuetify.js View File

@ -0,0 +1,25 @@
import Vue from 'vue'
import Vuetify from 'vuetify/lib'
import i18n from '@/i18n'
import '@/sass/overrides.sass'
Vue.use(Vuetify)
const theme = {
primary: '#4CAF50',
secondary: '#9C27b0',
accent: '#9C27b0',
info: '#00CAE3',
}
export default new Vuetify({
lang: {
t: (key, ...params) => i18n.t(key, params),
},
theme: {
themes: {
dark: theme,
light: theme,
},
},
})

+ 62
- 0
src/router.js View File

@ -0,0 +1,62 @@
import Vue from 'vue'
import Router from 'vue-router'
Vue.use(Router)
export default new Router({
mode: 'hash',
base: process.env.BASE_URL,
routes: [
{
path: '/',
component: () => import('@/views/dashboard/Index'),
children: [
// Dashboard
{
name: 'Dashboard',
path: '',
component: () => import('@/views/dashboard/Dashboard'),
},
// Pages
{
name: 'User Profile',
path: 'pages/user',
component: () => import('@/views/dashboard/pages/UserProfile'),
},
{
name: 'Notifications',
path: 'components/notifications',
component: () => import('@/views/dashboard/component/Notifications'),
},
{
name: 'Icons',
path: 'components/icons',
component: () => import('@/views/dashboard/component/Icons'),
},
{
name: 'Typography',
path: 'components/typography',
component: () => import('@/views/dashboard/component/Typography'),
},
// Tables
{
name: 'Regular Tables',
path: 'tables/regular-tables',
component: () => import('@/views/dashboard/tables/RegularTables'),
},
// Maps
{
name: 'Google Maps',
path: 'maps/google-maps',
component: () => import('@/views/dashboard/maps/GoogleMaps'),
},