diff --git a/package-lock.json b/package-lock.json index a06c178..3563acd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1976,7 +1976,6 @@ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", "dev": true, - "optional": true, "requires": { "normalize-path": "3.0.0", "picomatch": "2.2.2" @@ -2181,6 +2180,37 @@ "integrity": "sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA==", "dev": true }, + "axios": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.2.tgz", + "integrity": "sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==", + "requires": { + "follow-redirects": "1.5.10" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "follow-redirects": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", + "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", + "requires": { + "debug": "3.1.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, "babel-eslint": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", @@ -2321,8 +2351,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", - "dev": true, - "optional": true + "dev": true }, "bluebird": { "version": "3.7.2", @@ -2838,7 +2867,6 @@ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.0.tgz", "integrity": "sha512-aXAaho2VJtisB/1fg1+3nlLJqGOuewTzQpd/Tz0yTg2R0e4IGtshYvtjowyEumcBv2z+y4+kc75Mz7j5xJskcQ==", "dev": true, - "optional": true, "requires": { "anymatch": "3.1.1", "braces": "3.0.2", @@ -2855,7 +2883,6 @@ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, - "optional": true, "requires": { "fill-range": "7.0.1" } @@ -2865,7 +2892,6 @@ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, - "optional": true, "requires": { "to-regex-range": "5.0.1" } @@ -2874,15 +2900,13 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "optional": true + "dev": true }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, - "optional": true, "requires": { "is-number": "7.0.0" } @@ -3092,6 +3116,17 @@ "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", "dev": true }, + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "requires": { + "is-plain-object": "2.0.4", + "kind-of": "6.0.3", + "shallow-clone": "3.0.1" + } + }, "coa": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", @@ -6010,6 +6045,12 @@ } } }, + "interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "dev": true + }, "invariant": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", @@ -6080,7 +6121,6 @@ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, - "optional": true, "requires": { "binary-extensions": "2.1.0" } @@ -8648,11 +8688,19 @@ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz", "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==", "dev": true, - "optional": true, "requires": { "picomatch": "2.2.2" } }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "dev": true, + "requires": { + "resolve": "1.17.0" + } + }, "regenerate": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.1.tgz", @@ -9002,6 +9050,36 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, + "sass": { + "version": "1.26.9", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.26.9.tgz", + "integrity": "sha512-t8AkRVi+xvba4yZiLWkJdgJHBFCB3Dh4johniQkPy9ywkgFHNasXFEFP+RG/F6LhQ+aoE4aX+IorIWQjS0esVw==", + "dev": true, + "requires": { + "chokidar": "3.4.0" + } + }, + "sass-loader": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-8.0.2.tgz", + "integrity": "sha512-7o4dbSK8/Ol2KflEmSco4jTjQoV988bM82P9CZdmo9hR3RLnvNc0ufMNdMrB0caq38JQ/FgF4/7RcbcfKzxoFQ==", + "dev": true, + "requires": { + "clone-deep": "4.0.1", + "loader-utils": "1.4.0", + "neo-async": "2.6.1", + "schema-utils": "2.7.0", + "semver": "6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, "sax": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", @@ -9220,6 +9298,15 @@ "safe-buffer": "5.1.2" } }, + "shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "requires": { + "kind-of": "6.0.3" + } + }, "shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", @@ -9241,6 +9328,17 @@ "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==", "dev": true }, + "shelljs": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz", + "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==", + "dev": true, + "requires": { + "glob": "7.1.6", + "interpret": "1.4.0", + "rechoir": "0.6.2" + } + }, "signal-exit": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", @@ -10513,6 +10611,24 @@ "resolved": "https://registry.npmjs.org/vue/-/vue-2.6.11.tgz", "integrity": "sha512-VfPwgcGABbGAue9+sfrD4PuwFar7gPb1yl1UK1MwXoQPAw0BKSqWfoYCT/ThFrdEVWoI51dBuyCoiNU9bZDZxQ==" }, + "vue-cli-plugin-vuetify": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/vue-cli-plugin-vuetify/-/vue-cli-plugin-vuetify-2.0.6.tgz", + "integrity": "sha512-Y0VEK7gJTPW+LcSXBO8bx0YWzMoKMYHqcLpGF1EomGfAQrZafSulCZXcqF6++H4cPjFRkqB/YJ2xN/rTiu0DeA==", + "dev": true, + "requires": { + "semver": "7.3.2", + "shelljs": "0.8.4" + }, + "dependencies": { + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "dev": true + } + } + }, "vue-eslint-parser": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-7.1.0.tgz", @@ -10566,6 +10682,11 @@ } } }, + "vue-router": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.3.4.tgz", + "integrity": "sha512-SdKRBeoXUjaZ9R/8AyxsdTqkOfMcI5tWxPZOUX5Ie1BTL5rPSZ0O++pbiZCeYeythiZIdLEfkDiQPKIaWk5hDg==" + }, "vue-style-loader": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-4.1.2.tgz", @@ -10600,6 +10721,21 @@ "integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==", "dev": true }, + "vuetify": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/vuetify/-/vuetify-2.3.3.tgz", + "integrity": "sha512-N9Rwx/cscIdHfBItHxiwkhmoxIVyZLBRWd/5LJJs4aVZIX6qkjQV6ThhxzqCYgFDb2jKMftavWX5hNQTxA9qEA==" + }, + "vuetify-loader": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/vuetify-loader/-/vuetify-loader-1.5.0.tgz", + "integrity": "sha512-JC2EVAblox2FFWE8NIUoHvQmGnnGJLrHISo2Ngciov3mWEWpt2B3qfQ3CYwmUJ7nM99DQgYDdNs26Dg3bgKzEQ==", + "dev": true, + "requires": { + "file-loader": "4.3.0", + "loader-utils": "1.4.0" + } + }, "watchpack": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.2.tgz", diff --git a/package.json b/package.json index bfddf1f..2bfc66d 100644 --- a/package.json +++ b/package.json @@ -8,17 +8,25 @@ "lint": "vue-cli-service lint" }, "dependencies": { + "axios": "^0.19.2", "core-js": "^3.6.5", - "vue": "^2.6.11" + "vue": "^2.6.11", + "vue-router": "^3.2.0", + "vuetify": "^2.2.11" }, "devDependencies": { "@vue/cli-plugin-babel": "~4.4.0", "@vue/cli-plugin-eslint": "~4.4.0", + "@vue/cli-plugin-router": "^4.4.6", "@vue/cli-service": "~4.4.0", "babel-eslint": "^10.1.0", "eslint": "^6.7.2", "eslint-plugin-vue": "^6.2.2", - "vue-template-compiler": "^2.6.11" + "sass": "^1.19.0", + "sass-loader": "^8.0.0", + "vue-cli-plugin-vuetify": "~2.0.6", + "vue-template-compiler": "^2.6.11", + "vuetify-loader": "^1.3.0" }, "eslintConfig": { "root": true, diff --git a/public/index.html b/public/index.html index 4123528..ef978f1 100644 --- a/public/index.html +++ b/public/index.html @@ -6,6 +6,9 @@ <%= htmlWebpackPlugin.options.title %> + + +
+ + diff --git a/src/App.vue b/src/App.vue index 55df315..297018c 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,28 +1,56 @@ + + #app { + font-family: Avenir, Helvetica, Arial, sans-serif; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + /*text-align: center;*/ + color: #2c3e50; + } + + #nav { + padding: 0px; + } + + #nav a { + font-weight: bold; + color: #2c3e50; + } + + #nav a.router-link-exact-active { + color: #42b983; + } + \ No newline at end of file diff --git a/src/assets/logo.svg b/src/assets/logo.svg new file mode 100644 index 0000000..145b6d1 --- /dev/null +++ b/src/assets/logo.svg @@ -0,0 +1 @@ +Artboard 46 diff --git a/src/classes/Admin.js b/src/classes/Admin.js new file mode 100644 index 0000000..c8250d0 --- /dev/null +++ b/src/classes/Admin.js @@ -0,0 +1,17 @@ +import Axios from "axios"; +import VmailApi from "@/classes/VmailApi.js" + +export default class Admin { + constructor(url) { + this.vmailapi = new VmailApi(url); + this.apipath = "/api/admin"; + } + + GetList() { + return Axios.get(this.vmailapi.GetUrl() + this.apipath) + } + + Get(name) { + return Axios.get(this.vmailapi.GetUrl() + this.apipath + "/" + name) + } +} \ No newline at end of file diff --git a/src/classes/Alias.js b/src/classes/Alias.js new file mode 100644 index 0000000..db1a8e6 --- /dev/null +++ b/src/classes/Alias.js @@ -0,0 +1,17 @@ +import Axios from "axios"; +import VmailApi from "@/classes/VmailApi.js" + +export default class Alias { + constructor(url) { + this.vmailapi = new VmailApi(url); + this.apipath = "/api/alias"; + } + + GetList() { + return Axios.get(this.vmailapi.GetUrl() + this.apipath) + } + + GetItem(name) { + return Axios.get(this.vmailapi.GetUrl() + this.apipath + "/" + name) + } +} \ No newline at end of file diff --git a/src/classes/Mailbox.js b/src/classes/Mailbox.js new file mode 100644 index 0000000..4b63c44 --- /dev/null +++ b/src/classes/Mailbox.js @@ -0,0 +1,17 @@ +import Axios from "axios"; +import VmailApi from "@/classes/VmailApi.js" + +export default class Mailbox { + constructor(url) { + this.vmailapi = new VmailApi(url); + this.apipath = "/api/mailbox"; + } + + GetList() { + return Axios.get(this.vmailapi.GetUrl() + this.apipath) + } + + Get(name) { + return Axios.get(this.vmailapi.GetUrl() + this.apipath + "/" + name) + } +} \ No newline at end of file diff --git a/src/classes/VmailApi.js b/src/classes/VmailApi.js new file mode 100644 index 0000000..4954a85 --- /dev/null +++ b/src/classes/VmailApi.js @@ -0,0 +1,9 @@ +export default class VmailApi { + constructor(url) { + this.url = url; + } + + GetUrl() { + return this.url; + } +} \ No newline at end of file diff --git a/src/components/HelloWorld.vue b/src/components/HelloWorld.vue deleted file mode 100644 index 879051a..0000000 --- a/src/components/HelloWorld.vue +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - diff --git a/src/components/admin.vue b/src/components/admin.vue new file mode 100644 index 0000000..e66102b --- /dev/null +++ b/src/components/admin.vue @@ -0,0 +1,50 @@ + + + + + + + diff --git a/src/components/alias.vue b/src/components/alias.vue new file mode 100644 index 0000000..eef28cc --- /dev/null +++ b/src/components/alias.vue @@ -0,0 +1,50 @@ + + + + + + + diff --git a/src/components/mailbox.vue b/src/components/mailbox.vue new file mode 100644 index 0000000..a8695b2 --- /dev/null +++ b/src/components/mailbox.vue @@ -0,0 +1,50 @@ + + + + + + + diff --git a/src/main.js b/src/main.js index 63eb05f..fb3a13c 100644 --- a/src/main.js +++ b/src/main.js @@ -1,8 +1,12 @@ import Vue from 'vue' import App from './App.vue' +import router from './router' +import vuetify from './plugins/vuetify'; Vue.config.productionTip = false new Vue({ - render: h => h(App), -}).$mount('#app') + router, + vuetify, + render: h => h(App) +}).$mount('#app') \ No newline at end of file diff --git a/src/plugins/vuetify.js b/src/plugins/vuetify.js new file mode 100644 index 0000000..ec46adb --- /dev/null +++ b/src/plugins/vuetify.js @@ -0,0 +1,7 @@ +import Vue from 'vue'; +import Vuetify from 'vuetify/lib'; + +Vue.use(Vuetify); + +export default new Vuetify({ +}); diff --git a/src/router/index.js b/src/router/index.js new file mode 100644 index 0000000..e85d39c --- /dev/null +++ b/src/router/index.js @@ -0,0 +1,41 @@ +import Vue from 'vue' +import VueRouter from 'vue-router' +import Home from '../views/Home.vue' +import Admin from '../views/Admin.vue' +import Mailbox from '../views/Mailbox.vue' +import Alias from '../views/Alias.vue' + +Vue.use(VueRouter) + + const routes = [ + { + path: '/', + name: 'Home', + component: Home, + props: true + }, + { + path: '/admin', + name: 'Admin', + component: Admin, + props: true + }, + { + path: '/mailbox', + name: 'Mailbox', + component: Mailbox, + props: true + }, + { + path: '/alias', + name: 'Alias', + component: Alias, + props: true + } + ] + +const router = new VueRouter({ + routes +}) + +export default router diff --git a/src/views/Admin.vue b/src/views/Admin.vue new file mode 100644 index 0000000..107e489 --- /dev/null +++ b/src/views/Admin.vue @@ -0,0 +1,26 @@ + + + \ No newline at end of file diff --git a/src/views/Alias.vue b/src/views/Alias.vue new file mode 100644 index 0000000..82cc9ed --- /dev/null +++ b/src/views/Alias.vue @@ -0,0 +1,28 @@ + + + \ No newline at end of file diff --git a/src/views/Home.vue b/src/views/Home.vue new file mode 100644 index 0000000..a47a0e0 --- /dev/null +++ b/src/views/Home.vue @@ -0,0 +1,19 @@ + + + diff --git a/src/views/Mailbox.vue b/src/views/Mailbox.vue new file mode 100644 index 0000000..ff28205 --- /dev/null +++ b/src/views/Mailbox.vue @@ -0,0 +1,29 @@ + + + \ No newline at end of file diff --git a/vue.config.js b/vue.config.js new file mode 100644 index 0000000..ef6e86b --- /dev/null +++ b/vue.config.js @@ -0,0 +1,5 @@ +module.exports = { + "transpileDependencies": [ + "vuetify" + ] +} \ No newline at end of file