├── .editorconfig ├── .eslintignore ├── .eslintrc.js ├── .gitignore ├── .postcssrc.js ├── .stylintrc ├── README.md ├── babel.config.js ├── jsconfig.json ├── package.json ├── quasar.conf.js ├── src-pwa ├── custom-service-worker.js ├── pwa-flag.d.ts └── register-service-worker.js ├── src ├── App.vue ├── assets │ ├── quasar-logo-full.svg │ └── sad.svg ├── boot │ ├── .gitkeep │ ├── apexcharts.js │ ├── axios.js │ └── i18n.js ├── components │ ├── ApexDonut.vue │ ├── ApexLine.vue │ ├── AppNav.js │ ├── AppNav.sass │ ├── EssentialLink.vue │ ├── ListTransactions.vue │ ├── MiniCards.vue │ └── TabsDonut.vue ├── css │ └── app.css ├── i18n │ ├── en-us │ │ └── index.js │ └── index.js ├── index.template.html ├── layouts │ └── MainLayout.vue ├── nav.js ├── pages │ ├── Error404.vue │ └── Index.vue ├── router │ ├── index.js │ └── routes.js ├── statics │ ├── app-logo-128x128.png │ └── icons │ │ ├── apple-icon-120x120.png │ │ ├── apple-icon-152x152.png │ │ ├── apple-icon-167x167.png │ │ ├── apple-icon-180x180.png │ │ ├── favicon-16x16.png │ │ ├── favicon-32x32.png │ │ ├── favicon-96x96.png │ │ ├── favicon.ico │ │ ├── icon-128x128.png │ │ ├── icon-192x192.png │ │ ├── icon-256x256.png │ │ ├── icon-384x384.png │ │ ├── icon-512x512.png │ │ ├── ms-icon-144x144.png │ │ └── safari-pinned-tab.svg └── store │ ├── index.js │ ├── module-example │ ├── actions.js │ ├── getters.js │ ├── index.js │ ├── mutations.js │ └── state.js │ └── store-flag.d.ts └── yarn.lock /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | /dist 2 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | 4 | parserOptions: { 5 | parser: 'babel-eslint', 6 | sourceType: 'module' 7 | }, 8 | 9 | env: { 10 | browser: true 11 | }, 12 | 13 | extends: [ 14 | 'standard', 15 | // Uncomment any of the lines below to choose desired strictness, 16 | // but leave only one uncommented! 17 | // See https://eslint.vuejs.org/rules/#available-rules 18 | 'plugin:vue/essential' // Priority A: Essential (Error Prevention) 19 | // 'plugin:vue/strongly-recommended' // Priority B: Strongly Recommended (Improving Readability) 20 | // 'plugin:vue/recommended' // Priority C: Recommended (Minimizing Arbitrary Choices and Cognitive Overhead) 21 | ], 22 | 23 | // required to lint *.vue files 24 | plugins: [ 25 | 'vue' 26 | ], 27 | 28 | globals: { 29 | 'ga': true, // Google Analytics 30 | 'cordova': true, 31 | '__statics': true, 32 | 'process': true, 33 | 'Capacitor': true, 34 | 'chrome': true 35 | }, 36 | 37 | // add your custom rules here 38 | rules: { 39 | // allow async-await 40 | 'generator-star-spacing': 'off', 41 | // allow paren-less arrow functions 42 | 'arrow-parens': 'off', 43 | 'one-var': 'off', 44 | 45 | 'import/first': 'off', 46 | 'import/named': 'error', 47 | 'import/namespace': 'error', 48 | 'import/default': 'error', 49 | 'import/export': 'error', 50 | 'import/extensions': 'off', 51 | 'import/no-unresolved': 'off', 52 | 'import/no-extraneous-dependencies': 'off', 53 | 'prefer-promise-reject-errors': 'off', 54 | 55 | // allow debugger during development only 56 | 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off' 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .thumbs.db 3 | node_modules 4 | 5 | # Quasar core related directories 6 | .quasar 7 | /dist 8 | 9 | # Cordova related directories and files 10 | /src-cordova/node_modules 11 | /src-cordova/platforms 12 | /src-cordova/plugins 13 | /src-cordova/www 14 | 15 | # Capacitor related directories and files 16 | /src-capacitor/www 17 | /src-capacitor/node_modules 18 | 19 | # BEX related directories and files 20 | /src-bex/www 21 | /src-bex/js/core 22 | 23 | # Log files 24 | npm-debug.log* 25 | yarn-debug.log* 26 | yarn-error.log* 27 | 28 | # Editor directories and files 29 | .idea 30 | *.suo 31 | *.ntvs* 32 | *.njsproj 33 | *.sln 34 | -------------------------------------------------------------------------------- /.postcssrc.js: -------------------------------------------------------------------------------- 1 | // https://github.com/michael-ciniawsky/postcss-load-config 2 | 3 | module.exports = { 4 | plugins: [ 5 | // to edit target browsers: use "browserslist" field in package.json 6 | require('autoprefixer') 7 | ] 8 | } 9 | -------------------------------------------------------------------------------- /.stylintrc: -------------------------------------------------------------------------------- 1 | { 2 | "blocks": "never", 3 | "brackets": "never", 4 | "colons": "never", 5 | "colors": "always", 6 | "commaSpace": "always", 7 | "commentSpace": "always", 8 | "cssLiteral": "never", 9 | "depthLimit": false, 10 | "duplicates": true, 11 | "efficient": "always", 12 | "extendPref": false, 13 | "globalDupe": true, 14 | "indentPref": 2, 15 | "leadingZero": "never", 16 | "maxErrors": false, 17 | "maxWarnings": false, 18 | "mixed": false, 19 | "namingConvention": false, 20 | "namingConventionStrict": false, 21 | "none": "never", 22 | "noImportant": false, 23 | "parenSpace": "never", 24 | "placeholder": false, 25 | "prefixVarsWithDollar": "always", 26 | "quotePref": "single", 27 | "semicolons": "never", 28 | "sortOrder": false, 29 | "stackedProperties": "never", 30 | "trailingWhitespace": "never", 31 | "universal": "never", 32 | "valid": true, 33 | "zeroUnits": "never", 34 | "zIndexNormalize": false 35 | } 36 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Quasar Dashboard (quasar-dashboard) 2 | 3 | A Quasar Framework app 4 | 5 | ## Install the dependencies 6 | ```bash 7 | yarn 8 | ``` 9 | 10 | ### Start the app in development mode (hot-code reloading, error reporting, etc.) 11 | ```bash 12 | quasar dev 13 | ``` 14 | 15 | ### Lint the files 16 | ```bash 17 | yarn run lint 18 | ``` 19 | 20 | ### Build the app for production 21 | ```bash 22 | quasar build 23 | ``` 24 | 25 | ### Customize the configuration 26 | See [Configuring quasar.conf.js](https://quasar.dev/quasar-cli/quasar-conf-js). 27 | -------------------------------------------------------------------------------- /babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: [ 3 | '@quasar/babel-preset-app' 4 | ] 5 | } 6 | -------------------------------------------------------------------------------- /jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "baseUrl": ".", 4 | "paths": { 5 | "src/*": [ 6 | "src/*" 7 | ], 8 | "app/*": [ 9 | "*" 10 | ], 11 | "components/*": [ 12 | "src/components/*" 13 | ], 14 | "layouts/*": [ 15 | "src/layouts/*" 16 | ], 17 | "pages/*": [ 18 | "src/pages/*" 19 | ], 20 | "assets/*": [ 21 | "src/assets/*" 22 | ], 23 | "boot/*": [ 24 | "src/boot/*" 25 | ], 26 | "vue$": [ 27 | "node_modules/vue/dist/vue.esm.js" 28 | ] 29 | } 30 | }, 31 | "exclude": [ 32 | "dist", 33 | ".quasar", 34 | "node_modules" 35 | ] 36 | } -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "quasar-dashboard", 3 | "version": "0.0.1", 4 | "description": "A Quasar Framework app", 5 | "productName": "Quasar Dashboard", 6 | "cordovaId": "org.cordova.quasar.app", 7 | "capacitorId": "", 8 | "author": "Patrick Monteiro ", 9 | "private": true, 10 | "scripts": { 11 | "lint": "eslint --ext .js,.vue src", 12 | "test": "echo \"No test specified\" && exit 0" 13 | }, 14 | "dependencies": { 15 | "@quasar/extras": "^1.6.0", 16 | "apexcharts": "^3.16.1", 17 | "axios": "^0.18.1", 18 | "quasar": "^1.9.10", 19 | "vue-apexcharts": "^1.5.2", 20 | "vue-i18n": "^8.0.0" 21 | }, 22 | "devDependencies": { 23 | "@quasar/app": "^1.0.0", 24 | "babel-eslint": "^10.0.1", 25 | "eslint": "^6.8.0", 26 | "eslint-config-standard": "^14.1.0", 27 | "eslint-loader": "^3.0.3", 28 | "eslint-plugin-import": "^2.14.0", 29 | "eslint-plugin-node": "^11.0.0", 30 | "eslint-plugin-promise": "^4.0.1", 31 | "eslint-plugin-standard": "^4.0.0", 32 | "eslint-plugin-vue": "^6.1.2" 33 | }, 34 | "engines": { 35 | "node": ">= 10.18.1", 36 | "npm": ">= 6.13.4", 37 | "yarn": ">= 1.21.1" 38 | }, 39 | "browserslist": [ 40 | "last 1 version, not dead, ie >= 11" 41 | ], 42 | "resolutions": { 43 | "@babel/parser": "7.7.5" 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /quasar.conf.js: -------------------------------------------------------------------------------- 1 | // Configuration for your app 2 | // https://quasar.dev/quasar-cli/quasar-conf-js 3 | 4 | module.exports = function (ctx) { 5 | return { 6 | // app boot file (/src/boot) 7 | // --> boot files are part of "main.js" 8 | // https://quasar.dev/quasar-cli/cli-documentation/boot-files 9 | boot: [ 10 | 'i18n', 11 | 'axios', 12 | 'apexcharts' 13 | ], 14 | 15 | // https://quasar.dev/quasar-cli/quasar-conf-js#Property%3A-css 16 | css: [ 17 | 'app.css' 18 | ], 19 | 20 | // https://github.com/quasarframework/quasar/tree/dev/extras 21 | extras: [ 22 | // 'ionicons-v4', 23 | // 'mdi-v4', 24 | // 'fontawesome-v5', 25 | // 'eva-icons', 26 | 'themify', 27 | // 'line-awesome', 28 | // 'roboto-font-latin-ext', // this or either 'roboto-font', NEVER both! 29 | 30 | 'roboto-font', // optional, you are not bound to it 31 | 'material-icons' // optional, you are not bound to it 32 | ], 33 | 34 | // https://quasar.dev/quasar-cli/quasar-conf-js#Property%3A-framework 35 | framework: { 36 | iconSet: 'material-icons', // Quasar icon set 37 | lang: 'en-us', // Quasar language pack 38 | 39 | // Possible values for "all": 40 | // * 'auto' - Auto-import needed Quasar components & directives 41 | // (slightly higher compile time; next to minimum bundle size; most convenient) 42 | // * false - Manually specify what to import 43 | // (fastest compile time; minimum bundle size; most tedious) 44 | // * true - Import everything from Quasar 45 | // (not treeshaking Quasar; biggest bundle size; convenient) 46 | all: 'auto', 47 | 48 | components: [], 49 | directives: ['Ripple'], 50 | 51 | // Quasar plugins 52 | plugins: ['AppFullscreen'] 53 | }, 54 | 55 | // https://quasar.dev/quasar-cli/cli-documentation/supporting-ie 56 | supportIE: false, 57 | 58 | // Full list of options: https://quasar.dev/quasar-cli/quasar-conf-js#Property%3A-build 59 | build: { 60 | vueRouterMode: 'hash', // available values: 'hash', 'history' 61 | 62 | // rtl: false, // https://quasar.dev/options/rtl-support 63 | // showProgress: false, 64 | // gzip: true, 65 | // analyze: true, 66 | 67 | // Options below are automatically set depending on the env, set them if you want to override 68 | // preloadChunks: false, 69 | // extractCSS: false, 70 | 71 | // https://quasar.dev/quasar-cli/cli-documentation/handling-webpack 72 | extendWebpack (cfg) { 73 | cfg.module.rules.push({ 74 | enforce: 'pre', 75 | test: /\.(js|vue)$/, 76 | loader: 'eslint-loader', 77 | exclude: /node_modules/, 78 | options: { 79 | formatter: require('eslint').CLIEngine.getFormatter('stylish') 80 | } 81 | }) 82 | } 83 | }, 84 | 85 | // Full list of options: https://quasar.dev/quasar-cli/quasar-conf-js#Property%3A-devServer 86 | devServer: { 87 | https: false, 88 | port: 8080, 89 | open: true // opens browser window automatically 90 | }, 91 | 92 | // animations: 'all', // --- includes all animations 93 | // https://quasar.dev/options/animations 94 | animations: 'all', 95 | 96 | // https://quasar.dev/quasar-cli/developing-ssr/configuring-ssr 97 | ssr: { 98 | pwa: false 99 | }, 100 | 101 | // https://quasar.dev/quasar-cli/developing-pwa/configuring-pwa 102 | pwa: { 103 | workboxPluginMode: 'GenerateSW', // 'GenerateSW' or 'InjectManifest' 104 | workboxOptions: {}, // only for GenerateSW 105 | manifest: { 106 | name: 'Quasar Dashboard', 107 | short_name: 'Quasar Dashboard', 108 | description: 'A Quasar Framework app', 109 | display: 'standalone', 110 | orientation: 'portrait', 111 | background_color: '#ffffff', 112 | theme_color: '#027be3', 113 | icons: [ 114 | { 115 | src: 'statics/icons/icon-128x128.png', 116 | sizes: '128x128', 117 | type: 'image/png' 118 | }, 119 | { 120 | src: 'statics/icons/icon-192x192.png', 121 | sizes: '192x192', 122 | type: 'image/png' 123 | }, 124 | { 125 | src: 'statics/icons/icon-256x256.png', 126 | sizes: '256x256', 127 | type: 'image/png' 128 | }, 129 | { 130 | src: 'statics/icons/icon-384x384.png', 131 | sizes: '384x384', 132 | type: 'image/png' 133 | }, 134 | { 135 | src: 'statics/icons/icon-512x512.png', 136 | sizes: '512x512', 137 | type: 'image/png' 138 | } 139 | ] 140 | } 141 | }, 142 | 143 | // Full list of options: https://quasar.dev/quasar-cli/developing-cordova-apps/configuring-cordova 144 | cordova: { 145 | // noIosLegacyBuildFlag: true, // uncomment only if you know what you are doing 146 | id: 'org.cordova.quasar.app' 147 | }, 148 | 149 | // Full list of options: https://quasar.dev/quasar-cli/developing-capacitor-apps/configuring-capacitor 150 | capacitor: { 151 | hideSplashscreen: true 152 | }, 153 | 154 | // Full list of options: https://quasar.dev/quasar-cli/developing-electron-apps/configuring-electron 155 | electron: { 156 | bundler: 'packager', // 'packager' or 'builder' 157 | 158 | packager: { 159 | // https://github.com/electron-userland/electron-packager/blob/master/docs/api.md#options 160 | 161 | // OS X / Mac App Store 162 | // appBundleId: '', 163 | // appCategoryType: '', 164 | // osxSign: '', 165 | // protocol: 'myapp://path', 166 | 167 | // Windows only 168 | // win32metadata: { ... } 169 | }, 170 | 171 | builder: { 172 | // https://www.electron.build/configuration/configuration 173 | 174 | appId: 'quasar-dashboard' 175 | }, 176 | 177 | // More info: https://quasar.dev/quasar-cli/developing-electron-apps/node-integration 178 | nodeIntegration: true, 179 | 180 | extendWebpack (cfg) { 181 | // do something with Electron main process Webpack cfg 182 | // chainWebpack also available besides this extendWebpack 183 | } 184 | } 185 | } 186 | } 187 | -------------------------------------------------------------------------------- /src-pwa/custom-service-worker.js: -------------------------------------------------------------------------------- 1 | /* 2 | * This file (which will be your service worker) 3 | * is picked up by the build system ONLY if 4 | * quasar.conf > pwa > workboxPluginMode is set to "InjectManifest" 5 | */ 6 | -------------------------------------------------------------------------------- /src-pwa/pwa-flag.d.ts: -------------------------------------------------------------------------------- 1 | // THIS FEATURE-FLAG FILE IS AUTOGENERATED, 2 | // REMOVAL OR CHANGES WILL CAUSE RELATED TYPES TO STOP WORKING 3 | import "quasar/dist/types/feature-flag"; 4 | 5 | declare module "quasar/dist/types/feature-flag" { 6 | interface QuasarFeatureFlags { 7 | pwa: true; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src-pwa/register-service-worker.js: -------------------------------------------------------------------------------- 1 | import { register } from 'register-service-worker' 2 | import { Notify } from 'quasar' 3 | import { mdiCached } from '@quasar/extras/mdi-v4' 4 | 5 | // The ready(), registered(), cached(), updatefound() and updated() 6 | // events passes a ServiceWorkerRegistration instance in their arguments. 7 | // ServiceWorkerRegistration: https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerRegistration 8 | 9 | register(process.env.SERVICE_WORKER_FILE, { 10 | // The registrationOptions object will be passed as the second argument 11 | // to ServiceWorkerContainer.register() 12 | // https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerContainer/register#Parameter 13 | 14 | // registrationOptions: { scope: './' }, 15 | 16 | ready (/* registration */) { 17 | // console.log('Service worker is active.') 18 | }, 19 | 20 | registered (/* registration */) { 21 | // console.log('Service worker has been registered.') 22 | }, 23 | 24 | cached (/* registration */) { 25 | // console.log('Content has been cached for offline use.') 26 | }, 27 | 28 | updatefound (/* registration */) { 29 | // console.log('New content is downloading.') 30 | }, 31 | 32 | updated (/* registration */) { 33 | Notify.create({ 34 | color: 'negative', 35 | icon: mdiCached, 36 | message: 'Updated content is available. Please refresh the page.', 37 | timeout: 0, 38 | multiLine: true, 39 | position: 'top', 40 | actions: [ 41 | { 42 | label: 'Refresh', 43 | color: 'yellow', 44 | handler: () => { 45 | window.location.reload() 46 | } 47 | }, 48 | { 49 | label: 'Dismiss', 50 | color: 'white', 51 | handler: () => {} 52 | } 53 | ] 54 | }) 55 | }, 56 | 57 | offline () { 58 | // console.log('No internet connection found. App is running in offline mode.') 59 | }, 60 | 61 | error (/* err */) { 62 | // console.error('Error during service worker registration:', err) 63 | } 64 | }) 65 | -------------------------------------------------------------------------------- /src/App.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 12 | -------------------------------------------------------------------------------- /src/assets/quasar-logo-full.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 19 | 21 | 43 | 45 | 46 | 48 | image/svg+xml 49 | 51 | 52 | 53 | 54 | 55 | 60 | 63 | 66 | 69 | 75 | 79 | 83 | 87 | 91 | 95 | 99 | 103 | 104 | 105 | 106 | 107 | 113 | 118 | 126 | 133 | 142 | 151 | 160 | 169 | 178 | 187 | 188 | 189 | 190 | 191 | 192 | -------------------------------------------------------------------------------- /src/assets/sad.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/boot/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/patrickmonteiro/quasar-dashboard/be1dd7a5ee6b423c8e7301942ce69898855a3669/src/boot/.gitkeep -------------------------------------------------------------------------------- /src/boot/apexcharts.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import VueApexCharts from 'vue-apexcharts' 3 | 4 | Vue.component('apexchart', VueApexCharts) 5 | -------------------------------------------------------------------------------- /src/boot/axios.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import axios from 'axios' 3 | 4 | Vue.prototype.$axios = axios 5 | -------------------------------------------------------------------------------- /src/boot/i18n.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import VueI18n from 'vue-i18n' 3 | import messages from 'src/i18n' 4 | 5 | Vue.use(VueI18n) 6 | 7 | const i18n = new VueI18n({ 8 | locale: 'en-us', 9 | fallbackLocale: 'en-us', 10 | messages 11 | }) 12 | 13 | export default ({ app }) => { 14 | // Set i18n instance on app 15 | app.i18n = i18n 16 | } 17 | 18 | export { i18n } 19 | -------------------------------------------------------------------------------- /src/components/ApexDonut.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 40 | -------------------------------------------------------------------------------- /src/components/ApexLine.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 93 | -------------------------------------------------------------------------------- /src/components/AppNav.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | 3 | import { 4 | QExpansionItem, 5 | QItem, 6 | QItemSection, 7 | QIcon, 8 | QBadge, 9 | QList 10 | } from 'quasar' 11 | 12 | import Menu from '../nav.js' 13 | import './AppNav.sass' 14 | 15 | export default { 16 | name: 'AppNav', 17 | 18 | watch: { 19 | $route (route) { 20 | this.showMenu(this.$refs[route.path]) 21 | } 22 | }, 23 | 24 | methods: { 25 | showMenu (comp) { 26 | if (comp !== void 0 && comp !== this) { 27 | this.showMenu(comp.$parent) 28 | comp.show !== void 0 && comp.show() 29 | } 30 | }, 31 | 32 | getDrawerMenu (h, menu, path, level) { 33 | if (menu.children !== void 0) { 34 | return h( 35 | QExpansionItem, 36 | { 37 | staticClass: 'non-selectable', 38 | ref: path, 39 | props: { 40 | label: menu.name, 41 | dense: level > 0, 42 | icon: menu.icon, 43 | defaultOpened: menu.opened, 44 | expandSeparator: true, 45 | switchToggleSide: level > 0, 46 | denseToggle: level > 0 47 | } 48 | }, 49 | menu.children.map(item => this.getDrawerMenu( 50 | h, 51 | item, 52 | path + (item.path !== void 0 ? '/' + item.path : ''), 53 | level + 1 54 | )) 55 | ) 56 | } 57 | 58 | const props = { 59 | to: path, 60 | dense: level > 0, 61 | insetLevel: level > 1 ? 1.2 : level 62 | } 63 | 64 | const attrs = {} 65 | 66 | if (menu.external === true) { 67 | Object.assign(props, { 68 | to: void 0, 69 | clickable: true, 70 | tag: 'a' 71 | }) 72 | 73 | attrs.href = menu.path 74 | attrs.target = '_blank' 75 | } 76 | 77 | return h(QItem, { 78 | ref: path, 79 | props, 80 | attrs, 81 | staticClass: 'app-menu-entry non-selectable' 82 | }, [ 83 | menu.icon !== void 0 84 | ? h(QItemSection, { 85 | props: { avatar: true } 86 | }, [ h(QIcon, { props: { name: menu.icon } }) ]) 87 | : null, 88 | 89 | h(QItemSection, [ menu.name ]), 90 | 91 | menu.badge !== void 0 92 | ? h(QItemSection, { 93 | props: { side: true } 94 | }, [ h(QBadge, [ menu.badge ]) ]) 95 | : null 96 | ]) 97 | } 98 | }, 99 | 100 | render (h) { 101 | return h(QList, { staticClass: 'app-menu' }, Menu.map( 102 | item => this.getDrawerMenu(h, item, '/' + item.path, 0) 103 | )) 104 | }, 105 | 106 | mounted () { 107 | this.showMenu(this.$refs[this.$route.path]) 108 | } 109 | } 110 | -------------------------------------------------------------------------------- /src/components/AppNav.sass: -------------------------------------------------------------------------------- 1 | 2 | .app-menu 3 | 4 | .q-item__section--avatar 5 | color: $primary 6 | 7 | .q-expansion-item--expanded > div > .q-item > .q-item__section--main 8 | color: $primary 9 | font-weight: 700 10 | 11 | .q-expansion-item__content .q-item 12 | border-radius: 0 10px 10px 0 13 | margin-right: 12px 14 | 15 | .q-item.q-router-link--active 16 | background: scale-color($primary, $lightness: 90%) 17 | -------------------------------------------------------------------------------- /src/components/EssentialLink.vue: -------------------------------------------------------------------------------- 1 | 20 | 21 | 47 | -------------------------------------------------------------------------------- /src/components/ListTransactions.vue: -------------------------------------------------------------------------------- 1 | 81 | -------------------------------------------------------------------------------- /src/components/MiniCards.vue: -------------------------------------------------------------------------------- 1 | 18 | 19 | 35 | 36 | 41 | -------------------------------------------------------------------------------- /src/components/TabsDonut.vue: -------------------------------------------------------------------------------- 1 | 34 | 35 | 48 | -------------------------------------------------------------------------------- /src/css/app.css: -------------------------------------------------------------------------------- 1 | /* app global css */ 2 | -------------------------------------------------------------------------------- /src/i18n/en-us/index.js: -------------------------------------------------------------------------------- 1 | // This is just an example, 2 | // so you can safely delete all default props below 3 | 4 | export default { 5 | failed: 'Action failed', 6 | success: 'Action was successful' 7 | } 8 | -------------------------------------------------------------------------------- /src/i18n/index.js: -------------------------------------------------------------------------------- 1 | import enUS from './en-us' 2 | 3 | export default { 4 | 'en-us': enUS 5 | } 6 | -------------------------------------------------------------------------------- /src/index.template.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | <%= htmlWebpackPlugin.options.productName %> 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | -------------------------------------------------------------------------------- /src/layouts/MainLayout.vue: -------------------------------------------------------------------------------- 1 | 63 | 64 | 99 | -------------------------------------------------------------------------------- /src/nav.js: -------------------------------------------------------------------------------- 1 | 2 | module.exports = [ 3 | { 4 | name: 'Panel', 5 | label: 'teste', 6 | icon: 'dashboard', 7 | path: '' 8 | }, 9 | { 10 | name: 'Menu item', 11 | icon: 'list', 12 | path: '#', 13 | children: [ 14 | { 15 | name: 'sub item 1', 16 | path: '#', 17 | children: [ 18 | { 19 | name: 'sub item 2', 20 | path: '#' 21 | } 22 | ] 23 | } 24 | ] 25 | } 26 | ] 27 | -------------------------------------------------------------------------------- /src/pages/Error404.vue: -------------------------------------------------------------------------------- 1 | 20 | 21 | 26 | -------------------------------------------------------------------------------- /src/pages/Index.vue: -------------------------------------------------------------------------------- 1 | 29 | 30 | 51 | -------------------------------------------------------------------------------- /src/router/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import VueRouter from 'vue-router' 3 | 4 | import routes from './routes' 5 | 6 | Vue.use(VueRouter) 7 | 8 | /* 9 | * If not building with SSR mode, you can 10 | * directly export the Router instantiation; 11 | * 12 | * The function below can be async too; either use 13 | * async/await or return a Promise which resolves 14 | * with the Router instance. 15 | */ 16 | 17 | export default function (/* { store, ssrContext } */) { 18 | const Router = new VueRouter({ 19 | scrollBehavior: () => ({ x: 0, y: 0 }), 20 | routes, 21 | 22 | // Leave these as they are and change in quasar.conf.js instead! 23 | // quasar.conf.js -> build -> vueRouterMode 24 | // quasar.conf.js -> build -> publicPath 25 | mode: process.env.VUE_ROUTER_MODE, 26 | base: process.env.VUE_ROUTER_BASE 27 | }) 28 | 29 | return Router 30 | } 31 | -------------------------------------------------------------------------------- /src/router/routes.js: -------------------------------------------------------------------------------- 1 | 2 | const routes = [ 3 | { 4 | path: '/', 5 | component: () => import('layouts/MainLayout.vue'), 6 | children: [ 7 | { path: '', component: () => import('pages/Index.vue') } 8 | ] 9 | } 10 | ] 11 | 12 | // Always leave this as last one 13 | if (process.env.MODE !== 'ssr') { 14 | routes.push({ 15 | path: '*', 16 | component: () => import('pages/Error404.vue') 17 | }) 18 | } 19 | 20 | export default routes 21 | -------------------------------------------------------------------------------- /src/statics/app-logo-128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/patrickmonteiro/quasar-dashboard/be1dd7a5ee6b423c8e7301942ce69898855a3669/src/statics/app-logo-128x128.png -------------------------------------------------------------------------------- /src/statics/icons/apple-icon-120x120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/patrickmonteiro/quasar-dashboard/be1dd7a5ee6b423c8e7301942ce69898855a3669/src/statics/icons/apple-icon-120x120.png -------------------------------------------------------------------------------- /src/statics/icons/apple-icon-152x152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/patrickmonteiro/quasar-dashboard/be1dd7a5ee6b423c8e7301942ce69898855a3669/src/statics/icons/apple-icon-152x152.png -------------------------------------------------------------------------------- /src/statics/icons/apple-icon-167x167.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/patrickmonteiro/quasar-dashboard/be1dd7a5ee6b423c8e7301942ce69898855a3669/src/statics/icons/apple-icon-167x167.png -------------------------------------------------------------------------------- /src/statics/icons/apple-icon-180x180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/patrickmonteiro/quasar-dashboard/be1dd7a5ee6b423c8e7301942ce69898855a3669/src/statics/icons/apple-icon-180x180.png -------------------------------------------------------------------------------- /src/statics/icons/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/patrickmonteiro/quasar-dashboard/be1dd7a5ee6b423c8e7301942ce69898855a3669/src/statics/icons/favicon-16x16.png -------------------------------------------------------------------------------- /src/statics/icons/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/patrickmonteiro/quasar-dashboard/be1dd7a5ee6b423c8e7301942ce69898855a3669/src/statics/icons/favicon-32x32.png -------------------------------------------------------------------------------- /src/statics/icons/favicon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/patrickmonteiro/quasar-dashboard/be1dd7a5ee6b423c8e7301942ce69898855a3669/src/statics/icons/favicon-96x96.png -------------------------------------------------------------------------------- /src/statics/icons/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/patrickmonteiro/quasar-dashboard/be1dd7a5ee6b423c8e7301942ce69898855a3669/src/statics/icons/favicon.ico -------------------------------------------------------------------------------- /src/statics/icons/icon-128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/patrickmonteiro/quasar-dashboard/be1dd7a5ee6b423c8e7301942ce69898855a3669/src/statics/icons/icon-128x128.png -------------------------------------------------------------------------------- /src/statics/icons/icon-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/patrickmonteiro/quasar-dashboard/be1dd7a5ee6b423c8e7301942ce69898855a3669/src/statics/icons/icon-192x192.png -------------------------------------------------------------------------------- /src/statics/icons/icon-256x256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/patrickmonteiro/quasar-dashboard/be1dd7a5ee6b423c8e7301942ce69898855a3669/src/statics/icons/icon-256x256.png -------------------------------------------------------------------------------- /src/statics/icons/icon-384x384.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/patrickmonteiro/quasar-dashboard/be1dd7a5ee6b423c8e7301942ce69898855a3669/src/statics/icons/icon-384x384.png -------------------------------------------------------------------------------- /src/statics/icons/icon-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/patrickmonteiro/quasar-dashboard/be1dd7a5ee6b423c8e7301942ce69898855a3669/src/statics/icons/icon-512x512.png -------------------------------------------------------------------------------- /src/statics/icons/ms-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/patrickmonteiro/quasar-dashboard/be1dd7a5ee6b423c8e7301942ce69898855a3669/src/statics/icons/ms-icon-144x144.png -------------------------------------------------------------------------------- /src/statics/icons/safari-pinned-tab.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/store/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Vuex from 'vuex' 3 | 4 | // import example from './module-example' 5 | 6 | Vue.use(Vuex) 7 | 8 | /* 9 | * If not building with SSR mode, you can 10 | * directly export the Store instantiation; 11 | * 12 | * The function below can be async too; either use 13 | * async/await or return a Promise which resolves 14 | * with the Store instance. 15 | */ 16 | 17 | export default function (/* { ssrContext } */) { 18 | const Store = new Vuex.Store({ 19 | modules: { 20 | // example 21 | }, 22 | 23 | // enable strict mode (adds overhead!) 24 | // for dev mode only 25 | strict: process.env.DEV 26 | }) 27 | 28 | return Store 29 | } 30 | -------------------------------------------------------------------------------- /src/store/module-example/actions.js: -------------------------------------------------------------------------------- 1 | export function someAction (/* context */) { 2 | } 3 | -------------------------------------------------------------------------------- /src/store/module-example/getters.js: -------------------------------------------------------------------------------- 1 | export function someGetter (/* state */) { 2 | } 3 | -------------------------------------------------------------------------------- /src/store/module-example/index.js: -------------------------------------------------------------------------------- 1 | import state from './state' 2 | import * as getters from './getters' 3 | import * as mutations from './mutations' 4 | import * as actions from './actions' 5 | 6 | export default { 7 | namespaced: true, 8 | getters, 9 | mutations, 10 | actions, 11 | state 12 | } 13 | -------------------------------------------------------------------------------- /src/store/module-example/mutations.js: -------------------------------------------------------------------------------- 1 | export function someMutation (/* state */) { 2 | } 3 | -------------------------------------------------------------------------------- /src/store/module-example/state.js: -------------------------------------------------------------------------------- 1 | export default function () { 2 | return { 3 | // 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /src/store/store-flag.d.ts: -------------------------------------------------------------------------------- 1 | // THIS FEATURE-FLAG FILE IS AUTOGENERATED, 2 | // REMOVAL OR CHANGES WILL CAUSE RELATED TYPES TO STOP WORKING 3 | import "quasar/dist/types/feature-flag"; 4 | 5 | declare module "quasar/dist/types/feature-flag" { 6 | interface QuasarFeatureFlags { 7 | store: true; 8 | } 9 | } 10 | --------------------------------------------------------------------------------