mirror of
https://github.com/VueFileManager/vuefilemanager.git
synced 2026-05-13 08:45:01 +00:00
vue router implemented
This commit is contained in:
+207
-1
@@ -7,5 +7,211 @@
|
|||||||
"/js/main.efe95c75e3dc04fda73e.hot-update.js": "/js/main.efe95c75e3dc04fda73e.hot-update.js",
|
"/js/main.efe95c75e3dc04fda73e.hot-update.js": "/js/main.efe95c75e3dc04fda73e.hot-update.js",
|
||||||
"/js/main.b2921e5ff3050aa390ce.hot-update.js": "/js/main.b2921e5ff3050aa390ce.hot-update.js",
|
"/js/main.b2921e5ff3050aa390ce.hot-update.js": "/js/main.b2921e5ff3050aa390ce.hot-update.js",
|
||||||
"/js/main.a4123c79b197780e3ade.hot-update.js": "/js/main.a4123c79b197780e3ade.hot-update.js",
|
"/js/main.a4123c79b197780e3ade.hot-update.js": "/js/main.a4123c79b197780e3ade.hot-update.js",
|
||||||
"/js/main.03410e4c21da6f93734b.hot-update.js": "/js/main.03410e4c21da6f93734b.hot-update.js"
|
"/js/main.03410e4c21da6f93734b.hot-update.js": "/js/main.03410e4c21da6f93734b.hot-update.js",
|
||||||
|
"/js/main.1593b10ba86b3c716d71.hot-update.js": "/js/main.1593b10ba86b3c716d71.hot-update.js",
|
||||||
|
"/js/main.22d8df3e92baf3fce90e.hot-update.js": "/js/main.22d8df3e92baf3fce90e.hot-update.js",
|
||||||
|
"/js/main.ac0bf715cad6262cd972.hot-update.js": "/js/main.ac0bf715cad6262cd972.hot-update.js",
|
||||||
|
"/js/main.c80c1dc635621381471d.hot-update.js": "/js/main.c80c1dc635621381471d.hot-update.js",
|
||||||
|
"/js/main.da6ee16f2dc02b63b0a4.hot-update.js": "/js/main.da6ee16f2dc02b63b0a4.hot-update.js",
|
||||||
|
"/js/main.cf7b74318c538b7712f4.hot-update.js": "/js/main.cf7b74318c538b7712f4.hot-update.js",
|
||||||
|
"/js/main.fd2d817f27f919390b48.hot-update.js": "/js/main.fd2d817f27f919390b48.hot-update.js",
|
||||||
|
"/js/main.1c8848af67829d4713b3.hot-update.js": "/js/main.1c8848af67829d4713b3.hot-update.js",
|
||||||
|
"/js/main.0fa0f809d8ddc549f097.hot-update.js": "/js/main.0fa0f809d8ddc549f097.hot-update.js",
|
||||||
|
"/js/main.e2f2102015c35aef9578.hot-update.js": "/js/main.e2f2102015c35aef9578.hot-update.js",
|
||||||
|
"/js/main.a8d912e21dda9b5e0a0a.hot-update.js": "/js/main.a8d912e21dda9b5e0a0a.hot-update.js",
|
||||||
|
"/js/main.12b8cef7186b82cd87ae.hot-update.js": "/js/main.12b8cef7186b82cd87ae.hot-update.js",
|
||||||
|
"/js/main.1a811cd94065c796f08c.hot-update.js": "/js/main.1a811cd94065c796f08c.hot-update.js",
|
||||||
|
"/js/main.aaea667ba4e9ff4889c5.hot-update.js": "/js/main.aaea667ba4e9ff4889c5.hot-update.js",
|
||||||
|
"/js/main.e1c1ec69ee1f0d2b7611.hot-update.js": "/js/main.e1c1ec69ee1f0d2b7611.hot-update.js",
|
||||||
|
"/js/main.0b0dd15fedb075bc0d00.hot-update.js": "/js/main.0b0dd15fedb075bc0d00.hot-update.js",
|
||||||
|
"/js/main.549d8172379f7c6ab028.hot-update.js": "/js/main.549d8172379f7c6ab028.hot-update.js",
|
||||||
|
"/js/main.7792632bf76683ef4588.hot-update.js": "/js/main.7792632bf76683ef4588.hot-update.js",
|
||||||
|
"/js/main.86940367851defcb1bac.hot-update.js": "/js/main.86940367851defcb1bac.hot-update.js",
|
||||||
|
"/js/main.87f74b80f2503a0d728c.hot-update.js": "/js/main.87f74b80f2503a0d728c.hot-update.js",
|
||||||
|
"/js/main.3ebaa3668f23c6e26548.hot-update.js": "/js/main.3ebaa3668f23c6e26548.hot-update.js",
|
||||||
|
"/js/main.15057417af28b6c6d6ff.hot-update.js": "/js/main.15057417af28b6c6d6ff.hot-update.js",
|
||||||
|
"/js/main.2e7c576dbf2e7503b8ef.hot-update.js": "/js/main.2e7c576dbf2e7503b8ef.hot-update.js",
|
||||||
|
"/js/main.47f584845c3310757ea5.hot-update.js": "/js/main.47f584845c3310757ea5.hot-update.js",
|
||||||
|
"/js/main.6f7b50d4c52af64a51c2.hot-update.js": "/js/main.6f7b50d4c52af64a51c2.hot-update.js",
|
||||||
|
"/js/main.265e3ed2100aeb1cfff9.hot-update.js": "/js/main.265e3ed2100aeb1cfff9.hot-update.js",
|
||||||
|
"/js/main.a1cdd1c29ccf399b7141.hot-update.js": "/js/main.a1cdd1c29ccf399b7141.hot-update.js",
|
||||||
|
"/js/main.49bbabe613088b451c19.hot-update.js": "/js/main.49bbabe613088b451c19.hot-update.js",
|
||||||
|
"/js/main.3629824777dab206f9ee.hot-update.js": "/js/main.3629824777dab206f9ee.hot-update.js",
|
||||||
|
"/js/main.f61e6adbbe20e94ca550.hot-update.js": "/js/main.f61e6adbbe20e94ca550.hot-update.js",
|
||||||
|
"/js/main.2ee91f5e4302b51c0279.hot-update.js": "/js/main.2ee91f5e4302b51c0279.hot-update.js",
|
||||||
|
"/js/main.3f8e72c90f8f9bc89569.hot-update.js": "/js/main.3f8e72c90f8f9bc89569.hot-update.js",
|
||||||
|
"/js/main.d0a86f9a8cb2e673cf37.hot-update.js": "/js/main.d0a86f9a8cb2e673cf37.hot-update.js",
|
||||||
|
"/js/main.d0bc3040ff8aa0112594.hot-update.js": "/js/main.d0bc3040ff8aa0112594.hot-update.js",
|
||||||
|
"/js/main.26dc29e6caa621492b9d.hot-update.js": "/js/main.26dc29e6caa621492b9d.hot-update.js",
|
||||||
|
"/js/main.94a0a85c82278f47e6d0.hot-update.js": "/js/main.94a0a85c82278f47e6d0.hot-update.js",
|
||||||
|
"/js/main.c1f1327a107c7e877d26.hot-update.js": "/js/main.c1f1327a107c7e877d26.hot-update.js",
|
||||||
|
"/js/main.559481d20fb86a3590a6.hot-update.js": "/js/main.559481d20fb86a3590a6.hot-update.js",
|
||||||
|
"/js/main.5c9789988c31fd602b79.hot-update.js": "/js/main.5c9789988c31fd602b79.hot-update.js",
|
||||||
|
"/js/main.bc6cf3eca8ac4df9adc9.hot-update.js": "/js/main.bc6cf3eca8ac4df9adc9.hot-update.js",
|
||||||
|
"/js/main.b8c00841ae4b474b6a60.hot-update.js": "/js/main.b8c00841ae4b474b6a60.hot-update.js",
|
||||||
|
"/js/main.bd599b3896c244b6bef8.hot-update.js": "/js/main.bd599b3896c244b6bef8.hot-update.js",
|
||||||
|
"/js/main.2e36d672614a2914e23c.hot-update.js": "/js/main.2e36d672614a2914e23c.hot-update.js",
|
||||||
|
"/js/main.efdcc9d7e9c18a7d1cca.hot-update.js": "/js/main.efdcc9d7e9c18a7d1cca.hot-update.js",
|
||||||
|
"/js/main.c3f805fddf6ec0cbbb89.hot-update.js": "/js/main.c3f805fddf6ec0cbbb89.hot-update.js",
|
||||||
|
"/js/main.f0010dfcc8c31d3983c4.hot-update.js": "/js/main.f0010dfcc8c31d3983c4.hot-update.js",
|
||||||
|
"/js/main.4d8045b6b3778a4ffeb1.hot-update.js": "/js/main.4d8045b6b3778a4ffeb1.hot-update.js",
|
||||||
|
"/js/main.63238fe535516168d1e7.hot-update.js": "/js/main.63238fe535516168d1e7.hot-update.js",
|
||||||
|
"/js/main.b7a962e7b5a90c9e579d.hot-update.js": "/js/main.b7a962e7b5a90c9e579d.hot-update.js",
|
||||||
|
"/js/main.76e8ea5fa9f6362843f4.hot-update.js": "/js/main.76e8ea5fa9f6362843f4.hot-update.js",
|
||||||
|
"/js/main.c8046fb0c18ae8914591.hot-update.js": "/js/main.c8046fb0c18ae8914591.hot-update.js",
|
||||||
|
"/js/main.56a0bedf8508feb6dcd1.hot-update.js": "/js/main.56a0bedf8508feb6dcd1.hot-update.js",
|
||||||
|
"/js/main.45f799303e37fe182724.hot-update.js": "/js/main.45f799303e37fe182724.hot-update.js",
|
||||||
|
"/js/main.d87252dc4e16fcb8bc96.hot-update.js": "/js/main.d87252dc4e16fcb8bc96.hot-update.js",
|
||||||
|
"/js/main.ff82fb4dbf064fdd1911.hot-update.js": "/js/main.ff82fb4dbf064fdd1911.hot-update.js",
|
||||||
|
"/js/main.c6edce5f0759812ca8c7.hot-update.js": "/js/main.c6edce5f0759812ca8c7.hot-update.js",
|
||||||
|
"/js/main.80d40749e6b1bc770e96.hot-update.js": "/js/main.80d40749e6b1bc770e96.hot-update.js",
|
||||||
|
"/js/main.4cafd635a783e9702759.hot-update.js": "/js/main.4cafd635a783e9702759.hot-update.js",
|
||||||
|
"/js/main.159c429673622ebaa505.hot-update.js": "/js/main.159c429673622ebaa505.hot-update.js",
|
||||||
|
"/js/main.4d4ae0fe9c2255751bb3.hot-update.js": "/js/main.4d4ae0fe9c2255751bb3.hot-update.js",
|
||||||
|
"/js/main.3e60eec6d7f085ff9225.hot-update.js": "/js/main.3e60eec6d7f085ff9225.hot-update.js",
|
||||||
|
"/js/main.729555b6d04375fd4a8a.hot-update.js": "/js/main.729555b6d04375fd4a8a.hot-update.js",
|
||||||
|
"/js/main.dcbfd3cb4fec88c42272.hot-update.js": "/js/main.dcbfd3cb4fec88c42272.hot-update.js",
|
||||||
|
"/js/main.e1584ef8bce01d005b28.hot-update.js": "/js/main.e1584ef8bce01d005b28.hot-update.js",
|
||||||
|
"/js/main.76e6657c065ab87d5326.hot-update.js": "/js/main.76e6657c065ab87d5326.hot-update.js",
|
||||||
|
"/js/main.2a6301937a1f4a05986a.hot-update.js": "/js/main.2a6301937a1f4a05986a.hot-update.js",
|
||||||
|
"/js/main.5dc207685cdfd4232d6c.hot-update.js": "/js/main.5dc207685cdfd4232d6c.hot-update.js",
|
||||||
|
"/js/main.d87c42a5eae1eed09b9f.hot-update.js": "/js/main.d87c42a5eae1eed09b9f.hot-update.js",
|
||||||
|
"/js/main.5065c095791a58f08388.hot-update.js": "/js/main.5065c095791a58f08388.hot-update.js",
|
||||||
|
"/js/main.ae9c1527836164e6221f.hot-update.js": "/js/main.ae9c1527836164e6221f.hot-update.js",
|
||||||
|
"/js/main.64a5249c19f287d3d9f5.hot-update.js": "/js/main.64a5249c19f287d3d9f5.hot-update.js",
|
||||||
|
"/js/main.649b1010030c522abafd.hot-update.js": "/js/main.649b1010030c522abafd.hot-update.js",
|
||||||
|
"/js/main.c0a2c9b1daac8ce0f3d0.hot-update.js": "/js/main.c0a2c9b1daac8ce0f3d0.hot-update.js",
|
||||||
|
"/js/main.972d9ef69861ee475711.hot-update.js": "/js/main.972d9ef69861ee475711.hot-update.js",
|
||||||
|
"/js/main.c32dea75a0e744ee5f94.hot-update.js": "/js/main.c32dea75a0e744ee5f94.hot-update.js",
|
||||||
|
"/js/main.27ed4923387fde8852c0.hot-update.js": "/js/main.27ed4923387fde8852c0.hot-update.js",
|
||||||
|
"/js/main.b781ce03cd18bb1d9d5e.hot-update.js": "/js/main.b781ce03cd18bb1d9d5e.hot-update.js",
|
||||||
|
"/js/main.28a9f4094f796095da8b.hot-update.js": "/js/main.28a9f4094f796095da8b.hot-update.js",
|
||||||
|
"/js/main.c68844e921f5789877d2.hot-update.js": "/js/main.c68844e921f5789877d2.hot-update.js",
|
||||||
|
"/js/main.f44d6bffeb4bae9b7fcb.hot-update.js": "/js/main.f44d6bffeb4bae9b7fcb.hot-update.js",
|
||||||
|
"/js/main.06a4ffee2720e4f15696.hot-update.js": "/js/main.06a4ffee2720e4f15696.hot-update.js",
|
||||||
|
"/js/main.d9eb5e7ec061ebbfe5c4.hot-update.js": "/js/main.d9eb5e7ec061ebbfe5c4.hot-update.js",
|
||||||
|
"/js/main.9138c4a10256e728b68b.hot-update.js": "/js/main.9138c4a10256e728b68b.hot-update.js",
|
||||||
|
"/js/main.7b061ee41f753b148fbd.hot-update.js": "/js/main.7b061ee41f753b148fbd.hot-update.js",
|
||||||
|
"/js/main.38d6a637176f773c8985.hot-update.js": "/js/main.38d6a637176f773c8985.hot-update.js",
|
||||||
|
"/js/main.70944d4f89514e3effee.hot-update.js": "/js/main.70944d4f89514e3effee.hot-update.js",
|
||||||
|
"/js/main.40c67fc38208df539d4c.hot-update.js": "/js/main.40c67fc38208df539d4c.hot-update.js",
|
||||||
|
"/js/main.6f7ed9c50316e7523474.hot-update.js": "/js/main.6f7ed9c50316e7523474.hot-update.js",
|
||||||
|
"/js/main.545a2398e13034f72d5d.hot-update.js": "/js/main.545a2398e13034f72d5d.hot-update.js",
|
||||||
|
"/js/main.efdaad340c2eaf7fefa8.hot-update.js": "/js/main.efdaad340c2eaf7fefa8.hot-update.js",
|
||||||
|
"/js/main.4405e058ab82bd702872.hot-update.js": "/js/main.4405e058ab82bd702872.hot-update.js",
|
||||||
|
"/js/main.f95ffc2b0acc559669a1.hot-update.js": "/js/main.f95ffc2b0acc559669a1.hot-update.js",
|
||||||
|
"/js/main.b9e8c22f30099babdfcf.hot-update.js": "/js/main.b9e8c22f30099babdfcf.hot-update.js",
|
||||||
|
"/js/main.28c69286fc5bbd88176b.hot-update.js": "/js/main.28c69286fc5bbd88176b.hot-update.js",
|
||||||
|
"/js/main.5558aa165c02e9c36faa.hot-update.js": "/js/main.5558aa165c02e9c36faa.hot-update.js",
|
||||||
|
"/js/main.4681acdd50e76b32b9df.hot-update.js": "/js/main.4681acdd50e76b32b9df.hot-update.js",
|
||||||
|
"/js/main.562dc5f8d4b3a6326e2d.hot-update.js": "/js/main.562dc5f8d4b3a6326e2d.hot-update.js",
|
||||||
|
"/js/main.066e6206fb05b11e1f53.hot-update.js": "/js/main.066e6206fb05b11e1f53.hot-update.js",
|
||||||
|
"/js/main.74bc2e901432b3328d55.hot-update.js": "/js/main.74bc2e901432b3328d55.hot-update.js",
|
||||||
|
"/js/main.6e57009fbf2f7ace0a7d.hot-update.js": "/js/main.6e57009fbf2f7ace0a7d.hot-update.js",
|
||||||
|
"/js/main.f373c159b86b501322a6.hot-update.js": "/js/main.f373c159b86b501322a6.hot-update.js",
|
||||||
|
"/js/main.ecc10091727a02da6a9c.hot-update.js": "/js/main.ecc10091727a02da6a9c.hot-update.js",
|
||||||
|
"/js/main.adc54d65eed9e5c61556.hot-update.js": "/js/main.adc54d65eed9e5c61556.hot-update.js",
|
||||||
|
"/js/main.c01bb771108f9c646020.hot-update.js": "/js/main.c01bb771108f9c646020.hot-update.js",
|
||||||
|
"/js/main.6593cd8c148a84646c33.hot-update.js": "/js/main.6593cd8c148a84646c33.hot-update.js",
|
||||||
|
"/js/main.33234ee70a9719fb2579.hot-update.js": "/js/main.33234ee70a9719fb2579.hot-update.js",
|
||||||
|
"/js/main.ed594c8318b95e885daf.hot-update.js": "/js/main.ed594c8318b95e885daf.hot-update.js",
|
||||||
|
"/js/main.dcac8a3e2cf929ff4a94.hot-update.js": "/js/main.dcac8a3e2cf929ff4a94.hot-update.js",
|
||||||
|
"/js/main.e0dd196c2d6dbc12b1cc.hot-update.js": "/js/main.e0dd196c2d6dbc12b1cc.hot-update.js",
|
||||||
|
"/js/main.b4889018e0728536d393.hot-update.js": "/js/main.b4889018e0728536d393.hot-update.js",
|
||||||
|
"/js/main.d06f2e10dcca2d1fd48b.hot-update.js": "/js/main.d06f2e10dcca2d1fd48b.hot-update.js",
|
||||||
|
"/js/main.8acb4fb977f37099e6a9.hot-update.js": "/js/main.8acb4fb977f37099e6a9.hot-update.js",
|
||||||
|
"/js/main.733284992c576b1d4857.hot-update.js": "/js/main.733284992c576b1d4857.hot-update.js",
|
||||||
|
"/js/main.0953370e9bc3130d11ba.hot-update.js": "/js/main.0953370e9bc3130d11ba.hot-update.js",
|
||||||
|
"/js/main.4ec217ab92f02f6b3808.hot-update.js": "/js/main.4ec217ab92f02f6b3808.hot-update.js",
|
||||||
|
"/js/main.2ba1fae1f9083614ad8c.hot-update.js": "/js/main.2ba1fae1f9083614ad8c.hot-update.js",
|
||||||
|
"/js/main.2ffb560768c76cbceb47.hot-update.js": "/js/main.2ffb560768c76cbceb47.hot-update.js",
|
||||||
|
"/js/main.ae152ee74174b7c61919.hot-update.js": "/js/main.ae152ee74174b7c61919.hot-update.js",
|
||||||
|
"/js/main.e807166c583485b287f4.hot-update.js": "/js/main.e807166c583485b287f4.hot-update.js",
|
||||||
|
"/js/main.f5d0806be3ea5a7fb07b.hot-update.js": "/js/main.f5d0806be3ea5a7fb07b.hot-update.js",
|
||||||
|
"/js/main.27671330e1991c634a33.hot-update.js": "/js/main.27671330e1991c634a33.hot-update.js",
|
||||||
|
"/js/main.641b4556506c6b97286d.hot-update.js": "/js/main.641b4556506c6b97286d.hot-update.js",
|
||||||
|
"/js/main.0962b36d9c473537d2d4.hot-update.js": "/js/main.0962b36d9c473537d2d4.hot-update.js",
|
||||||
|
"/js/main.16bcaf0e1165ef3fc23d.hot-update.js": "/js/main.16bcaf0e1165ef3fc23d.hot-update.js",
|
||||||
|
"/js/main.f48ba321f0d840249a4a.hot-update.js": "/js/main.f48ba321f0d840249a4a.hot-update.js",
|
||||||
|
"/js/main.7b57598614a7f8aa8d97.hot-update.js": "/js/main.7b57598614a7f8aa8d97.hot-update.js",
|
||||||
|
"/js/main.9e93e203f69daceb8e4d.hot-update.js": "/js/main.9e93e203f69daceb8e4d.hot-update.js",
|
||||||
|
"/js/main.8b5a75a61d01d67371d0.hot-update.js": "/js/main.8b5a75a61d01d67371d0.hot-update.js",
|
||||||
|
"/js/main.61561f638b169a63c4c3.hot-update.js": "/js/main.61561f638b169a63c4c3.hot-update.js",
|
||||||
|
"/js/main.f2ed949ef8596b9b9eae.hot-update.js": "/js/main.f2ed949ef8596b9b9eae.hot-update.js",
|
||||||
|
"/js/main.2aaaeac0077d05ee844c.hot-update.js": "/js/main.2aaaeac0077d05ee844c.hot-update.js",
|
||||||
|
"/js/main.6ecca9cb2b4220a353d0.hot-update.js": "/js/main.6ecca9cb2b4220a353d0.hot-update.js",
|
||||||
|
"/js/main.ccc950ff1c199f694651.hot-update.js": "/js/main.ccc950ff1c199f694651.hot-update.js",
|
||||||
|
"/js/main.1cfc1f5ab8663c7bb239.hot-update.js": "/js/main.1cfc1f5ab8663c7bb239.hot-update.js",
|
||||||
|
"/js/main.16c9de12186cd01066fe.hot-update.js": "/js/main.16c9de12186cd01066fe.hot-update.js",
|
||||||
|
"/js/main.d823beda1b1570be851d.hot-update.js": "/js/main.d823beda1b1570be851d.hot-update.js",
|
||||||
|
"/js/main.eeb0ffd23c5df9eb221e.hot-update.js": "/js/main.eeb0ffd23c5df9eb221e.hot-update.js",
|
||||||
|
"/js/main.5e7e600792bb71b7db68.hot-update.js": "/js/main.5e7e600792bb71b7db68.hot-update.js",
|
||||||
|
"/js/main.e1d4c929ab4f8b777d47.hot-update.js": "/js/main.e1d4c929ab4f8b777d47.hot-update.js",
|
||||||
|
"/js/main.45f7944bb3af35922c64.hot-update.js": "/js/main.45f7944bb3af35922c64.hot-update.js",
|
||||||
|
"/js/main.89989cef2a8d1eb393f1.hot-update.js": "/js/main.89989cef2a8d1eb393f1.hot-update.js",
|
||||||
|
"/js/main.4971dfeda8fda570d2fa.hot-update.js": "/js/main.4971dfeda8fda570d2fa.hot-update.js",
|
||||||
|
"/js/main.7e430f3a435737227103.hot-update.js": "/js/main.7e430f3a435737227103.hot-update.js",
|
||||||
|
"/js/main.8d06bacc4373bd3cca5f.hot-update.js": "/js/main.8d06bacc4373bd3cca5f.hot-update.js",
|
||||||
|
"/js/main.193bbf6cb7a0cbaf3705.hot-update.js": "/js/main.193bbf6cb7a0cbaf3705.hot-update.js",
|
||||||
|
"/js/main.fbab26416a02c186c906.hot-update.js": "/js/main.fbab26416a02c186c906.hot-update.js",
|
||||||
|
"/js/main.000b68c1b5279e3d418b.hot-update.js": "/js/main.000b68c1b5279e3d418b.hot-update.js",
|
||||||
|
"/js/main.cc3e70b1fa1b8bfc7f21.hot-update.js": "/js/main.cc3e70b1fa1b8bfc7f21.hot-update.js",
|
||||||
|
"/js/main.5e36ed4ac236566fc1ef.hot-update.js": "/js/main.5e36ed4ac236566fc1ef.hot-update.js",
|
||||||
|
"/js/main.874c9b2920b24f744f37.hot-update.js": "/js/main.874c9b2920b24f744f37.hot-update.js",
|
||||||
|
"/js/main.5532d50ebe0577822aa0.hot-update.js": "/js/main.5532d50ebe0577822aa0.hot-update.js",
|
||||||
|
"/js/main.890ae7e6f9143a263bcd.hot-update.js": "/js/main.890ae7e6f9143a263bcd.hot-update.js",
|
||||||
|
"/js/main.52a6f58edde8fcc06a56.hot-update.js": "/js/main.52a6f58edde8fcc06a56.hot-update.js",
|
||||||
|
"/js/main.a9710a976ccdf0ef75ec.hot-update.js": "/js/main.a9710a976ccdf0ef75ec.hot-update.js",
|
||||||
|
"/js/main.7c116a2375fb6011c0df.hot-update.js": "/js/main.7c116a2375fb6011c0df.hot-update.js",
|
||||||
|
"/js/main.8bf61630c11938aa868a.hot-update.js": "/js/main.8bf61630c11938aa868a.hot-update.js",
|
||||||
|
"/js/main.6a65ae1a508c784cef20.hot-update.js": "/js/main.6a65ae1a508c784cef20.hot-update.js",
|
||||||
|
"/js/main.780e4703e1c4eef0224a.hot-update.js": "/js/main.780e4703e1c4eef0224a.hot-update.js",
|
||||||
|
"/js/main.915aac92a42985ed75d9.hot-update.js": "/js/main.915aac92a42985ed75d9.hot-update.js",
|
||||||
|
"/js/main.0ed70fed65b100346771.hot-update.js": "/js/main.0ed70fed65b100346771.hot-update.js",
|
||||||
|
"/js/main.b5823ed93ed9ab9584a2.hot-update.js": "/js/main.b5823ed93ed9ab9584a2.hot-update.js",
|
||||||
|
"/js/main.059e7929ca5a3aaf71aa.hot-update.js": "/js/main.059e7929ca5a3aaf71aa.hot-update.js",
|
||||||
|
"/js/main.64f79855bd9b00f7bcfd.hot-update.js": "/js/main.64f79855bd9b00f7bcfd.hot-update.js",
|
||||||
|
"/js/main.fb1320b8883c557e5e92.hot-update.js": "/js/main.fb1320b8883c557e5e92.hot-update.js",
|
||||||
|
"/js/main.e55d30d37707a3fa23f2.hot-update.js": "/js/main.e55d30d37707a3fa23f2.hot-update.js",
|
||||||
|
"/js/main.f9ffa503d13670e554c2.hot-update.js": "/js/main.f9ffa503d13670e554c2.hot-update.js",
|
||||||
|
"/js/main.2b98e2a5ed1bfa7b6e5e.hot-update.js": "/js/main.2b98e2a5ed1bfa7b6e5e.hot-update.js",
|
||||||
|
"/js/main.3e07bec6d4786727259e.hot-update.js": "/js/main.3e07bec6d4786727259e.hot-update.js",
|
||||||
|
"/js/main.a06a96f7eb0659afae56.hot-update.js": "/js/main.a06a96f7eb0659afae56.hot-update.js",
|
||||||
|
"/js/main.8d6337331ed349f2c8ef.hot-update.js": "/js/main.8d6337331ed349f2c8ef.hot-update.js",
|
||||||
|
"/js/main.e8d22bd65491d1fbc68a.hot-update.js": "/js/main.e8d22bd65491d1fbc68a.hot-update.js",
|
||||||
|
"/js/main.86a0433aa86e090d18ea.hot-update.js": "/js/main.86a0433aa86e090d18ea.hot-update.js",
|
||||||
|
"/js/main.5c8a7a29efa889c4e53b.hot-update.js": "/js/main.5c8a7a29efa889c4e53b.hot-update.js",
|
||||||
|
"/js/main.54efaf1fc562b7272951.hot-update.js": "/js/main.54efaf1fc562b7272951.hot-update.js",
|
||||||
|
"/js/main.4ff7195cb661704a1b81.hot-update.js": "/js/main.4ff7195cb661704a1b81.hot-update.js",
|
||||||
|
"/js/main.f71c27e89fb68d825c05.hot-update.js": "/js/main.f71c27e89fb68d825c05.hot-update.js",
|
||||||
|
"/js/main.194897f06249fb3f9962.hot-update.js": "/js/main.194897f06249fb3f9962.hot-update.js",
|
||||||
|
"/js/main.2c809a243eb4077162c7.hot-update.js": "/js/main.2c809a243eb4077162c7.hot-update.js",
|
||||||
|
"/js/main.1713b0f495c5d9d53546.hot-update.js": "/js/main.1713b0f495c5d9d53546.hot-update.js",
|
||||||
|
"/js/main.86ad2ff758d49f076ab1.hot-update.js": "/js/main.86ad2ff758d49f076ab1.hot-update.js",
|
||||||
|
"/js/main.419fc5ba2f8ecd16d39b.hot-update.js": "/js/main.419fc5ba2f8ecd16d39b.hot-update.js",
|
||||||
|
"/js/main.b538a683b679ff610516.hot-update.js": "/js/main.b538a683b679ff610516.hot-update.js",
|
||||||
|
"/js/main.0180cddd1715177635a7.hot-update.js": "/js/main.0180cddd1715177635a7.hot-update.js",
|
||||||
|
"/js/main.e926ded105d4c8b8efa0.hot-update.js": "/js/main.e926ded105d4c8b8efa0.hot-update.js",
|
||||||
|
"/js/main.3a536043ccdac53259d7.hot-update.js": "/js/main.3a536043ccdac53259d7.hot-update.js",
|
||||||
|
"/js/main.1e594e2adeeb7d5aa159.hot-update.js": "/js/main.1e594e2adeeb7d5aa159.hot-update.js",
|
||||||
|
"/js/main.f169e12ff8c4c10c509e.hot-update.js": "/js/main.f169e12ff8c4c10c509e.hot-update.js",
|
||||||
|
"/js/main.14147eeb76496b2cf4b4.hot-update.js": "/js/main.14147eeb76496b2cf4b4.hot-update.js",
|
||||||
|
"/js/main.3012dd5ecb02053093a5.hot-update.js": "/js/main.3012dd5ecb02053093a5.hot-update.js",
|
||||||
|
"/js/main.c14ef7924e4d0633c57b.hot-update.js": "/js/main.c14ef7924e4d0633c57b.hot-update.js",
|
||||||
|
"/js/main.c4927541644c755c14a4.hot-update.js": "/js/main.c4927541644c755c14a4.hot-update.js",
|
||||||
|
"/js/main.f00bcadde0f4c0441e5f.hot-update.js": "/js/main.f00bcadde0f4c0441e5f.hot-update.js",
|
||||||
|
"/js/main.a18e5a41067654213bcc.hot-update.js": "/js/main.a18e5a41067654213bcc.hot-update.js",
|
||||||
|
"/js/main.4b71496f1726c4006220.hot-update.js": "/js/main.4b71496f1726c4006220.hot-update.js",
|
||||||
|
"/js/main.79cfe2ae4a91cb940443.hot-update.js": "/js/main.79cfe2ae4a91cb940443.hot-update.js",
|
||||||
|
"/js/main.b38ec9ea3080c0b28f7b.hot-update.js": "/js/main.b38ec9ea3080c0b28f7b.hot-update.js",
|
||||||
|
"/js/main.522b7bd36270d98ca048.hot-update.js": "/js/main.522b7bd36270d98ca048.hot-update.js",
|
||||||
|
"/js/main.228cb36baa0c7b8e63f2.hot-update.js": "/js/main.228cb36baa0c7b8e63f2.hot-update.js",
|
||||||
|
"/js/main.1f8e416264c7b9d2ec41.hot-update.js": "/js/main.1f8e416264c7b9d2ec41.hot-update.js",
|
||||||
|
"/js/main.2226db028adde092f1d8.hot-update.js": "/js/main.2226db028adde092f1d8.hot-update.js",
|
||||||
|
"/js/main.27dfc30ba2c13d0b0b5c.hot-update.js": "/js/main.27dfc30ba2c13d0b0b5c.hot-update.js",
|
||||||
|
"/js/main.7e85d952d00d3346022a.hot-update.js": "/js/main.7e85d952d00d3346022a.hot-update.js",
|
||||||
|
"/js/main.e4a8de968ec92614dd63.hot-update.js": "/js/main.e4a8de968ec92614dd63.hot-update.js",
|
||||||
|
"/js/main.cb34728e0343ee07f04a.hot-update.js": "/js/main.cb34728e0343ee07f04a.hot-update.js",
|
||||||
|
"/js/main.1ac34f41e25905226a04.hot-update.js": "/js/main.1ac34f41e25905226a04.hot-update.js",
|
||||||
|
"/js/main.0cd80fb1e2a926ba3037.hot-update.js": "/js/main.0cd80fb1e2a926ba3037.hot-update.js"
|
||||||
}
|
}
|
||||||
|
|||||||
+101
-6
@@ -1,25 +1,120 @@
|
|||||||
<template>
|
<template>
|
||||||
<div id="app">
|
<div id="vue-file-manager" :class="appSize">
|
||||||
<VueFileManager style="height: 100%; width: 100%"/>
|
<div id="popups">
|
||||||
|
|
||||||
|
<!--System alerts-->
|
||||||
|
<Alert />
|
||||||
|
|
||||||
|
<!--Popup-->
|
||||||
|
<PopupMoveItem />
|
||||||
|
|
||||||
|
<!--Mobile Menu-->
|
||||||
|
<MobileOptionList />
|
||||||
|
|
||||||
|
<!--Background vignette-->
|
||||||
|
<Vignette />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="application-wrapper" v-if="isLogged">
|
||||||
|
|
||||||
|
<!--Navigation Sidebar-->
|
||||||
|
<Sidebar />
|
||||||
|
|
||||||
|
<!--File page-->
|
||||||
|
<router-view />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<router-view v-if="! isLogged" />
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import VueFileManager from './components/VueFileManager.vue'
|
import MobileOptionList from '@/components/VueFileManagerComponents/FilesView/MobileOptionList'
|
||||||
|
import PopupMoveItem from '@/components/VueFileManagerComponents/Others/PopupMoveItem'
|
||||||
|
import Vignette from '@/components/VueFileManagerComponents/Others/Vignette'
|
||||||
|
import Alert from '@/components/VueFileManagerComponents/FilesView/Alert'
|
||||||
|
import Sidebar from '@/components/VueFileManagerComponents/Sidebar/Sidebar'
|
||||||
|
import {ResizeSensor} from 'css-element-queries'
|
||||||
|
import {mapGetters} from 'vuex'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'app',
|
name: 'app',
|
||||||
components: {
|
components: {
|
||||||
VueFileManager
|
MobileOptionList,
|
||||||
|
PopupMoveItem,
|
||||||
|
Vignette,
|
||||||
|
Sidebar,
|
||||||
|
Alert,
|
||||||
},
|
},
|
||||||
|
computed: {
|
||||||
|
...mapGetters([
|
||||||
|
'appSize', 'isLogged', 'isGuest'
|
||||||
|
]),
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
handleAppResize() {
|
||||||
|
let appView = document.getElementById('vue-file-manager')
|
||||||
|
.offsetWidth
|
||||||
|
|
||||||
|
if (appView <= 690)
|
||||||
|
this.$store.commit('SET_APP_WIDTH', 'small')
|
||||||
|
if (appView > 690 && appView < 960)
|
||||||
|
this.$store.commit('SET_APP_WIDTH', 'medium')
|
||||||
|
if (appView > 960)
|
||||||
|
this.$store.commit('SET_APP_WIDTH', 'large')
|
||||||
|
},
|
||||||
|
},
|
||||||
|
beforeMount() {
|
||||||
|
// Store config to vuex
|
||||||
|
this.$store.commit('SET_AUTHORIZED', this.$root.$data.config.hasAuthCookie)
|
||||||
|
this.$store.commit('SET_CONFIG', this.$root.$data.config)
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
|
||||||
|
// Handle VueFileManager width
|
||||||
|
var VueFileManager = document.getElementById('vue-file-manager');
|
||||||
|
new ResizeSensor(VueFileManager, this.handleAppResize);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss">
|
<style lang="scss">
|
||||||
|
@import "@assets/app.scss";
|
||||||
|
|
||||||
#app {
|
* {
|
||||||
height: 100%;
|
outline: 0;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
font-family: 'Nunito', sans-serif;
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
|
-moz-osx-font-smoothing: grayscale;
|
||||||
|
box-sizing: border-box;
|
||||||
|
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Dark mode support
|
||||||
|
@media (prefers-color-scheme: dark) {
|
||||||
|
|
||||||
|
body, html {
|
||||||
|
background: $dark_mode_background;
|
||||||
|
color: $dark_mode_text_primary;
|
||||||
|
|
||||||
|
img {
|
||||||
|
opacity: .8;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#auth {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#vue-file-manager {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
overflow-y: auto;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -1,150 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div id="vue-file-manager" :class="appSize">
|
|
||||||
|
|
||||||
<router-view />
|
|
||||||
<!--Authentication pages-->
|
|
||||||
<!--<Auth v-if="isGuest" />-->
|
|
||||||
|
|
||||||
<!--<div v-if="isLogged" id="auth">
|
|
||||||
|
|
||||||
<div id="popups">
|
|
||||||
|
|
||||||
<!–System alerts–>
|
|
||||||
<Alert />
|
|
||||||
|
|
||||||
<!–Popup–>
|
|
||||||
<PopupMoveItem />
|
|
||||||
|
|
||||||
<!–Mobile Menu–>
|
|
||||||
<MobileOptionList />
|
|
||||||
|
|
||||||
<!–Background vignette–>
|
|
||||||
<Vignette />
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div id="application-wrapper">
|
|
||||||
|
|
||||||
<!–Navigation Sidebar–>
|
|
||||||
<Sidebar />
|
|
||||||
|
|
||||||
<!–User settings Page–>
|
|
||||||
<UserSettings v-if="isCurrentView('user-settings')"/>
|
|
||||||
|
|
||||||
<!–File page–>
|
|
||||||
<FilesView v-if="isCurrentView('files')"/>
|
|
||||||
</div>
|
|
||||||
</div>-->
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
import MobileOptionList from '@/components/VueFileManagerComponents/FilesView/MobileOptionList'
|
|
||||||
import PopupMoveItem from '@/components/VueFileManagerComponents/Others/PopupMoveItem'
|
|
||||||
import UserSettings from '@/components/VueFileManagerComponents/UserSettings'
|
|
||||||
import Vignette from '@/components/VueFileManagerComponents/Others/Vignette'
|
|
||||||
import Alert from '@/components/VueFileManagerComponents/FilesView/Alert'
|
|
||||||
import FilesView from '@/components/VueFileManagerComponents/FilesView'
|
|
||||||
import Sidebar from '@/components/VueFileManagerComponents/Sidebar'
|
|
||||||
import Auth from '@/components/VueFileManagerComponents/Auth'
|
|
||||||
import {ResizeSensor} from 'css-element-queries'
|
|
||||||
import {mapGetters} from 'vuex'
|
|
||||||
import {events} from "../bus";
|
|
||||||
|
|
||||||
export default {
|
|
||||||
name: 'VueFileManager',
|
|
||||||
components: {
|
|
||||||
MobileOptionList,
|
|
||||||
PopupMoveItem,
|
|
||||||
UserSettings,
|
|
||||||
FilesView,
|
|
||||||
Vignette,
|
|
||||||
Sidebar,
|
|
||||||
Alert,
|
|
||||||
Auth,
|
|
||||||
},
|
|
||||||
computed: {
|
|
||||||
...mapGetters([
|
|
||||||
'isLogged', 'isGuest', 'currentView', 'appSize'
|
|
||||||
]),
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
isCurrentView(view) {
|
|
||||||
return this.currentView === view
|
|
||||||
},
|
|
||||||
handleAppResize() {
|
|
||||||
let appView = document.getElementById('vue-file-manager')
|
|
||||||
.offsetWidth
|
|
||||||
|
|
||||||
if (appView <= 690)
|
|
||||||
this.$store.commit('SET_APP_WIDTH', 'small')
|
|
||||||
if (appView > 690 && appView < 960)
|
|
||||||
this.$store.commit('SET_APP_WIDTH', 'medium')
|
|
||||||
if (appView > 960)
|
|
||||||
this.$store.commit('SET_APP_WIDTH', 'large')
|
|
||||||
},
|
|
||||||
},
|
|
||||||
beforeMount() {
|
|
||||||
// Store config to vuex
|
|
||||||
this.$store.commit('SET_AUTHORIZED', this.$root.$data.config.hasAuthCookie)
|
|
||||||
this.$store.commit('SET_CONFIG', this.$root.$data.config)
|
|
||||||
},
|
|
||||||
mounted() {
|
|
||||||
|
|
||||||
// Handle VueFileManager width
|
|
||||||
var VueFileManager = document.getElementById('vue-file-manager');
|
|
||||||
new ResizeSensor(VueFileManager, this.handleAppResize);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style lang="scss">
|
|
||||||
@import "@assets/app.scss";
|
|
||||||
|
|
||||||
* {
|
|
||||||
outline: 0;
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
font-family: 'Nunito', sans-serif;
|
|
||||||
-webkit-font-smoothing: antialiased;
|
|
||||||
-moz-osx-font-smoothing: grayscale;
|
|
||||||
box-sizing: border-box;
|
|
||||||
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
|
|
||||||
font-size: 16px;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Dark mode support
|
|
||||||
@media (prefers-color-scheme: dark) {
|
|
||||||
|
|
||||||
body, html {
|
|
||||||
background: $dark_mode_background;
|
|
||||||
color: $dark_mode_text_primary;
|
|
||||||
|
|
||||||
img {
|
|
||||||
opacity: .8;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#auth {
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
#vue-file-manager {
|
|
||||||
position: relative;
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
overflow-y: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
#application-wrapper {
|
|
||||||
display: flex;
|
|
||||||
height: 100%;
|
|
||||||
|
|
||||||
#content {
|
|
||||||
position: relative;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
@@ -1,555 +0,0 @@
|
|||||||
<template>
|
|
||||||
<AuthContentWrapper ref="auth">
|
|
||||||
|
|
||||||
<!--Log In by Email-->
|
|
||||||
<AuthContent name="log-in" :visible="false">
|
|
||||||
<img class="logo" :src="config.app_logo" :alt="config.app_name">
|
|
||||||
<h1>{{ $t('page_login.title') }}</h1>
|
|
||||||
<h2>{{ $t('page_login.subtitle') }}</h2>
|
|
||||||
|
|
||||||
<ValidationObserver @submit.prevent="logIn" ref="log_in" v-slot="{ invalid }" tag="form"
|
|
||||||
class="form inline-form">
|
|
||||||
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="E-Mail" rules="required"
|
|
||||||
v-slot="{ errors }">
|
|
||||||
<input v-model="loginEmail" :placeholder="$t('page_login.placeholder_email')" type="email"
|
|
||||||
:class="{'is-error': errors[0]}"/>
|
|
||||||
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
|
|
||||||
</ValidationProvider>
|
|
||||||
|
|
||||||
<AuthButton icon="chevron-right" :text="$t('page_login.button_next')" :loading="isLoading" :disabled="isLoading"/>
|
|
||||||
</ValidationObserver>
|
|
||||||
|
|
||||||
<span v-if="config.userRegistration" class="additional-link">{{ $t('page_login.registration_text') }} <b
|
|
||||||
@click="goToAuthPage('sign-up')">{{ $t('page_login.registration_button') }}</b></span>
|
|
||||||
</AuthContent>
|
|
||||||
|
|
||||||
<!--Log in By Password-->
|
|
||||||
<AuthContent name="sign-in" :visible="false">
|
|
||||||
|
|
||||||
<div class="user" v-if="checkedAccount">
|
|
||||||
<img class="user-avatar" :src="checkedAccount.avatar" :alt="checkedAccount.name">
|
|
||||||
<h1>{{ $t('page_sign_in.title', {name: checkedAccount.name}) }}</h1>
|
|
||||||
<h2>{{ $t('page_sign_in.subtitle') }}</h2>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<ValidationObserver @submit.prevent="singIn" ref="sign_in" v-slot="{ invalid }" tag="form"
|
|
||||||
class="form inline-form">
|
|
||||||
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="User Password" rules="required"
|
|
||||||
v-slot="{ errors }">
|
|
||||||
<input v-model="loginPassword" :placeholder="$t('page_sign_in.placeholder_password')" type="password"
|
|
||||||
:class="{'is-error': errors[0]}"/>
|
|
||||||
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
|
|
||||||
</ValidationProvider>
|
|
||||||
|
|
||||||
<AuthButton icon="chevron-right" :text="$t('page_sign_in.button_log_in')" :loading="isLoading" :disabled="isLoading"/>
|
|
||||||
</ValidationObserver>
|
|
||||||
|
|
||||||
<span class="additional-link">{{ $t('page_sign_in.password_reset_text') }} <b @click="goToAuthPage('forgotten-password')">{{ $t('page_sign_in.password_reset_button') }}</b></span>
|
|
||||||
</AuthContent>
|
|
||||||
|
|
||||||
<!--Forgotten your password?-->
|
|
||||||
<AuthContent name="forgotten-password" :visible="false">
|
|
||||||
<img class="logo" :src="config.app_logo" :alt="config.app_name">
|
|
||||||
<h1>{{ $t('page_forgotten_password.title') }}</h1>
|
|
||||||
<h2>{{ $t('page_forgotten_password.subtitle') }}</h2>
|
|
||||||
|
|
||||||
<ValidationObserver @submit.prevent="forgottenPassword" ref="forgotten_password" v-slot="{ invalid }"
|
|
||||||
tag="form" class="form inline-form">
|
|
||||||
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="E-Mail" rules="required"
|
|
||||||
v-slot="{ errors }">
|
|
||||||
<input v-model="recoverEmail" :placeholder="$t('page_login.placeholder_email')" type="email"
|
|
||||||
:class="{'is-error': errors[0]}"/>
|
|
||||||
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
|
|
||||||
</ValidationProvider>
|
|
||||||
|
|
||||||
<AuthButton icon="chevron-right" :text="$t('page_forgotten_password.button_get_link')" :loading="isLoading" :disabled="isLoading"/>
|
|
||||||
</ValidationObserver>
|
|
||||||
|
|
||||||
<span class="additional-link">{{ $t('page_forgotten_password.password_remember_text') }} <b @click="goToAuthPage('log-in')">{{ $t('page_forgotten_password.password_remember_button') }}</b></span>
|
|
||||||
</AuthContent>
|
|
||||||
|
|
||||||
<!--Create new password-->
|
|
||||||
<AuthContent name="create-new-password" :visible="false">
|
|
||||||
<img class="logo" :src="config.app_logo" :alt="config.app_name">
|
|
||||||
<h1>{{ $t('page_create_password.title') }}</h1>
|
|
||||||
<h2>{{ $t('page_create_password.subtitle') }}</h2>
|
|
||||||
|
|
||||||
<ValidationObserver @submit.prevent="createNewPassword" ref="create_new_password" v-slot="{ invalid }"
|
|
||||||
tag="form" class="form block-form create-new-password">
|
|
||||||
|
|
||||||
<div class="block-wrapper">
|
|
||||||
<label>{{ $t('page_create_password.label_email') }}</label>
|
|
||||||
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="E-Mail" rules="required"
|
|
||||||
v-slot="{ errors }">
|
|
||||||
<input v-model="recoverPassword.email" :placeholder="$t('page_login.placeholder_email')" type="email"
|
|
||||||
:class="{'is-error': errors[0]}"/>
|
|
||||||
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
|
|
||||||
</ValidationProvider>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="block-wrapper">
|
|
||||||
<label>{{ $t('page_create_password.label_new_pass') }}:</label>
|
|
||||||
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="New Password"
|
|
||||||
rules="required" v-slot="{ errors }">
|
|
||||||
<input v-model="recoverPassword.newPassword" :placeholder="$t('page_create_password.label_new_pass')" type="password"
|
|
||||||
:class="{'is-error': errors[0]}"/>
|
|
||||||
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
|
|
||||||
</ValidationProvider>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="block-wrapper">
|
|
||||||
<label>{{ $t('page_create_password.label_confirm_pass') }}:</label>
|
|
||||||
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Confirm Password"
|
|
||||||
rules="required" v-slot="{ errors }">
|
|
||||||
<input v-model="recoverPassword.newPasswordConfirm" :placeholder="$t('page_create_password.label_confirm_pass')"
|
|
||||||
type="password" :class="{'is-error': errors[0]}"/>
|
|
||||||
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
|
|
||||||
</ValidationProvider>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div>
|
|
||||||
<AuthButton icon="chevron-right" :text="$t('page_create_password.button_update')" :loading="isLoading" :disabled="isLoading"/>
|
|
||||||
</div>
|
|
||||||
</ValidationObserver>
|
|
||||||
|
|
||||||
<span class="additional-link">{{ $t('page_forgotten_password.password_remember_text') }} <b @click="goToAuthPage('log-in')">{{ $t('page_forgotten_password.password_remember_button') }}</b></span>
|
|
||||||
</AuthContent>
|
|
||||||
|
|
||||||
<!--Registration-->
|
|
||||||
<AuthContent name="sign-up" :visible="false">
|
|
||||||
<img class="logo" :src="config.app_logo" :alt="config.app_name">
|
|
||||||
<h1>{{ $t('page_registration.title') }}</h1>
|
|
||||||
<h2>{{ $t('page_registration.subtitle') }}</h2>
|
|
||||||
|
|
||||||
<ValidationObserver @submit.prevent="signUp" ref="sign_up" v-slot="{ invalid }" tag="form"
|
|
||||||
class="form block-form">
|
|
||||||
|
|
||||||
<div class="block-wrapper">
|
|
||||||
<label>{{ $t('page_registration.label_email') }}</label>
|
|
||||||
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="E-Mail" rules="required"
|
|
||||||
v-slot="{ errors }">
|
|
||||||
<input v-model="register.email" :placeholder="$t('page_registration.placeholder_email')" type="email"
|
|
||||||
:class="{'is-error': errors[0]}"/>
|
|
||||||
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
|
|
||||||
</ValidationProvider>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="block-wrapper">
|
|
||||||
<label>{{ $t('page_registration.label_name') }}</label>
|
|
||||||
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Full Name" rules="required"
|
|
||||||
v-slot="{ errors }">
|
|
||||||
<input v-model="register.name" :placeholder="$t('page_registration.placeholder_name')" type="text"
|
|
||||||
:class="{'is-error': errors[0]}"/>
|
|
||||||
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
|
|
||||||
</ValidationProvider>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="block-wrapper">
|
|
||||||
<label>{{ $t('page_registration.label_pass') }}</label>
|
|
||||||
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Your New Password"
|
|
||||||
rules="required" v-slot="{ errors }">
|
|
||||||
<input v-model="register.password" :placeholder="$t('page_registration.placeholder_pass')" type="password"
|
|
||||||
:class="{'is-error': errors[0]}"/>
|
|
||||||
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
|
|
||||||
</ValidationProvider>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="block-wrapper">
|
|
||||||
<label>{{ $t('page_registration.label_confirm_pass') }}</label>
|
|
||||||
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Confirm Your Password"
|
|
||||||
rules="required" v-slot="{ errors }">
|
|
||||||
<input v-model="register.password_confirmation" :placeholder="$t('page_registration.placeholder_confirm_pass')"
|
|
||||||
type="password" :class="{'is-error': errors[0]}"/>
|
|
||||||
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
|
|
||||||
</ValidationProvider>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div>
|
|
||||||
<AuthButton icon="chevron-right" :text="$t('page_registration.button_create_account')" :loading="isLoading" :disabled="isLoading"/>
|
|
||||||
</div>
|
|
||||||
</ValidationObserver>
|
|
||||||
|
|
||||||
<span class="additional-link">{{ $t('page_registration.have_an_account') }} <b @click="goToAuthPage('log-in')">{{ $t('page_forgotten_password.password_remember_button') }}</b></span>
|
|
||||||
</AuthContent>
|
|
||||||
|
|
||||||
<!--Password reset link sended-->
|
|
||||||
<AuthContent name="password-reset-link-sended" :visible="false">
|
|
||||||
<img class="logo" :src="config.app_logo" :alt="config.app_name">
|
|
||||||
<h1>{{ $t('page_forgotten_password.pass_sennded_title') }}</h1>
|
|
||||||
<h2>{{ $t('page_forgotten_password.pass_sennded_subtitle') }}</h2>
|
|
||||||
|
|
||||||
<span class="additional-link">{{ $t('page_forgotten_password.password_remember_text') }} <b @click="goToAuthPage('log-in')">{{ $t('page_forgotten_password.password_remember_button') }}</b></span>
|
|
||||||
</AuthContent>
|
|
||||||
|
|
||||||
<!--Password reset successfully-->
|
|
||||||
<AuthContent name="password-reset-successfully" :visible="false">
|
|
||||||
<img class="logo" :src="config.app_logo" :alt="config.app_name">
|
|
||||||
<h1>{{ $t('page_forgotten_password.pass_reseted_title') }}</h1>
|
|
||||||
<h2>{{ $t('page_forgotten_password.pass_reseted_subtitle') }}</h2>
|
|
||||||
|
|
||||||
<AuthButton icon="chevron-right" @click.native="goToAuthPage('log-in')" :text="$t('page_forgotten_password.pass_reseted_signin')"/>
|
|
||||||
</AuthContent>
|
|
||||||
</AuthContentWrapper>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
import AuthContentWrapper from '@/components/VueFileManagerComponents/Auth/AuthContentWrapper'
|
|
||||||
import {ValidationProvider, ValidationObserver} from 'vee-validate/dist/vee-validate.full'
|
|
||||||
import AuthContent from '@/components/VueFileManagerComponents/Auth/AuthContent'
|
|
||||||
import AuthButton from '@/components/VueFileManagerComponents/Auth/AuthButton'
|
|
||||||
import {required} from 'vee-validate/dist/rules'
|
|
||||||
import {mapGetters} from 'vuex'
|
|
||||||
import axios from 'axios'
|
|
||||||
|
|
||||||
export default {
|
|
||||||
name: 'Auth',
|
|
||||||
components: {
|
|
||||||
AuthContentWrapper,
|
|
||||||
ValidationProvider,
|
|
||||||
ValidationObserver,
|
|
||||||
AuthContent,
|
|
||||||
AuthButton,
|
|
||||||
required,
|
|
||||||
},
|
|
||||||
computed: {
|
|
||||||
...mapGetters(['config']),
|
|
||||||
},
|
|
||||||
watch: {
|
|
||||||
loginEmail(val) {
|
|
||||||
this.recoverEmail = val
|
|
||||||
}
|
|
||||||
},
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
isLoading: false,
|
|
||||||
checkedAccount: undefined,
|
|
||||||
loginPassword: '',
|
|
||||||
loginEmail: '',
|
|
||||||
recoverEmail: '',
|
|
||||||
recoverPassword: {
|
|
||||||
token: undefined,
|
|
||||||
email: '',
|
|
||||||
newPassword: '',
|
|
||||||
newPasswordConfirm: '',
|
|
||||||
},
|
|
||||||
register: {
|
|
||||||
name: '',
|
|
||||||
email: '',
|
|
||||||
password: '',
|
|
||||||
password_confirmation: '',
|
|
||||||
},
|
|
||||||
}
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
goToAuthPage(slug) {
|
|
||||||
|
|
||||||
this.$refs.auth.$children.forEach(page => {
|
|
||||||
|
|
||||||
// Hide current step
|
|
||||||
page.isVisible = false
|
|
||||||
|
|
||||||
if (page.$props.name === slug) {
|
|
||||||
|
|
||||||
// Go to next step
|
|
||||||
page.isVisible = true
|
|
||||||
}
|
|
||||||
})
|
|
||||||
},
|
|
||||||
async logIn() {
|
|
||||||
|
|
||||||
// Validate fields
|
|
||||||
const isValid = await this.$refs.log_in.validate();
|
|
||||||
|
|
||||||
if (!isValid) return;
|
|
||||||
|
|
||||||
// Start loading
|
|
||||||
this.isLoading = true
|
|
||||||
|
|
||||||
// Send request to get verify account
|
|
||||||
axios
|
|
||||||
.post(this.$store.getters.api + '/user/check', {
|
|
||||||
email: this.loginEmail,
|
|
||||||
})
|
|
||||||
.then(response => {
|
|
||||||
|
|
||||||
// End loading
|
|
||||||
this.isLoading = false
|
|
||||||
|
|
||||||
this.checkedAccount = response.data
|
|
||||||
this.goToAuthPage('sign-in')
|
|
||||||
})
|
|
||||||
.catch(error => {
|
|
||||||
|
|
||||||
if (error.response.status == 404) {
|
|
||||||
|
|
||||||
this.$refs.log_in.setErrors({
|
|
||||||
'E-Mail': [error.response.data.message]
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// End loading
|
|
||||||
this.isLoading = false
|
|
||||||
})
|
|
||||||
},
|
|
||||||
async singIn() {
|
|
||||||
|
|
||||||
// Validate fields
|
|
||||||
const isValid = await this.$refs.sign_in.validate();
|
|
||||||
|
|
||||||
if (!isValid) return;
|
|
||||||
|
|
||||||
// Start loading
|
|
||||||
this.isLoading = true
|
|
||||||
|
|
||||||
// Send request to get user token
|
|
||||||
axios
|
|
||||||
.post(this.$store.getters.api + '/user/login', {
|
|
||||||
email: this.loginEmail,
|
|
||||||
password: this.loginPassword,
|
|
||||||
})
|
|
||||||
.then(() => {
|
|
||||||
|
|
||||||
// End loading
|
|
||||||
this.isLoading = false
|
|
||||||
|
|
||||||
// Set login state
|
|
||||||
this.$store.commit('SET_AUTHORIZED', true)
|
|
||||||
})
|
|
||||||
.catch(error => {
|
|
||||||
|
|
||||||
if (error.response.status == 400) {
|
|
||||||
|
|
||||||
this.$refs.sign_in.setErrors({
|
|
||||||
'User Password': [this.$t('validation_errors.incorrect_password')]
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// End loading
|
|
||||||
this.isLoading = false
|
|
||||||
})
|
|
||||||
},
|
|
||||||
async forgottenPassword() {
|
|
||||||
|
|
||||||
// Validate fields
|
|
||||||
const isValid = await this.$refs.forgotten_password.validate();
|
|
||||||
|
|
||||||
if (!isValid) return;
|
|
||||||
|
|
||||||
// Start loading
|
|
||||||
this.isLoading = true
|
|
||||||
|
|
||||||
// Send request to get user reset link
|
|
||||||
axios
|
|
||||||
.post(this.$store.getters.api + '/password/email', {
|
|
||||||
email: this.recoverEmail
|
|
||||||
})
|
|
||||||
.then(() => {
|
|
||||||
|
|
||||||
// End loading
|
|
||||||
this.isLoading = false
|
|
||||||
|
|
||||||
this.goToAuthPage('password-reset-link-sended')
|
|
||||||
}).catch(error => {
|
|
||||||
|
|
||||||
if (error.response.status == 422) {
|
|
||||||
this.$refs.forgotten_password.setErrors({
|
|
||||||
'E-Mail': error.response.data.message
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// End loading
|
|
||||||
this.isLoading = false
|
|
||||||
})
|
|
||||||
},
|
|
||||||
async createNewPassword() {
|
|
||||||
|
|
||||||
// Validate fields
|
|
||||||
const isValid = await this.$refs.create_new_password.validate();
|
|
||||||
|
|
||||||
if (!isValid) return;
|
|
||||||
|
|
||||||
// Start loading
|
|
||||||
this.isLoading = true
|
|
||||||
|
|
||||||
// Send request to get user reset link
|
|
||||||
axios
|
|
||||||
.post(this.$store.getters.api + '/password/reset', {
|
|
||||||
email: this.recoverPassword.email,
|
|
||||||
token: this.recoverPassword.token,
|
|
||||||
password: this.recoverPassword.newPassword,
|
|
||||||
password_confirmation: this.recoverPassword.newPasswordConfirm,
|
|
||||||
})
|
|
||||||
.then(() => {
|
|
||||||
|
|
||||||
// End loading
|
|
||||||
this.isLoading = false
|
|
||||||
|
|
||||||
this.goToAuthPage('password-reset-successfully')
|
|
||||||
})
|
|
||||||
.catch(error => {
|
|
||||||
|
|
||||||
if (error.response.status == 422) {
|
|
||||||
|
|
||||||
if (error.response.data.error) {
|
|
||||||
|
|
||||||
this.$refs.create_new_password.setErrors({
|
|
||||||
'E-Mail': error.response.data.error
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (error.response.data.errors['password']) {
|
|
||||||
|
|
||||||
this.$refs.create_new_password.setErrors({
|
|
||||||
'New Password': error.response.data.errors['password']
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// End loading
|
|
||||||
this.isLoading = false
|
|
||||||
})
|
|
||||||
},
|
|
||||||
async signUp() {
|
|
||||||
|
|
||||||
// Validate fields
|
|
||||||
const isValid = await this.$refs.sign_up.validate();
|
|
||||||
|
|
||||||
if (!isValid) return;
|
|
||||||
|
|
||||||
// Start loading
|
|
||||||
this.isLoading = true
|
|
||||||
|
|
||||||
// Send request to get user token
|
|
||||||
axios
|
|
||||||
.post(this.$store.getters.api + '/user/register', this.register)
|
|
||||||
.then(() => {
|
|
||||||
|
|
||||||
// End loading
|
|
||||||
this.isLoading = false
|
|
||||||
|
|
||||||
// Set login state
|
|
||||||
this.$store.commit('SET_AUTHORIZED', true)
|
|
||||||
})
|
|
||||||
.catch(error => {
|
|
||||||
|
|
||||||
if (error.response.status == 422) {
|
|
||||||
|
|
||||||
if (error.response.data.errors['email']) {
|
|
||||||
|
|
||||||
this.$refs.sign_up.setErrors({
|
|
||||||
'E-Mail': error.response.data.errors['email']
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (error.response.data.errors['password']) {
|
|
||||||
|
|
||||||
this.$refs.sign_up.setErrors({
|
|
||||||
'Your New Password': error.response.data.errors['password']
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// End loading
|
|
||||||
this.isLoading = false
|
|
||||||
})
|
|
||||||
}
|
|
||||||
},
|
|
||||||
mounted() {
|
|
||||||
|
|
||||||
// Check if user try to get reset page
|
|
||||||
let pathname = location.pathname.split('/')[1]
|
|
||||||
let token = location.search.split('token=')[1]
|
|
||||||
|
|
||||||
if (pathname === this.$t('routes.create_new_password')) {
|
|
||||||
this.recoverPassword.token = token
|
|
||||||
this.goToAuthPage('create-new-password')
|
|
||||||
} else {
|
|
||||||
this.goToAuthPage('log-in')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style scoped lang="scss">
|
|
||||||
@import "@assets/app.scss";
|
|
||||||
@import '@assets/vue-file-manager/_forms';
|
|
||||||
|
|
||||||
.auth-form {
|
|
||||||
text-align: center;
|
|
||||||
max-width: 600px;
|
|
||||||
padding: 25px 20px;
|
|
||||||
display: table-cell;
|
|
||||||
vertical-align: middle;
|
|
||||||
|
|
||||||
.user-avatar {
|
|
||||||
width: 100px;
|
|
||||||
height: 100px;
|
|
||||||
object-fit: cover;
|
|
||||||
margin-bottom: 20px;
|
|
||||||
border-radius: 8px;
|
|
||||||
box-shadow: 0 10px 30px rgba(25, 54, 60, 0.2);
|
|
||||||
}
|
|
||||||
|
|
||||||
.logo {
|
|
||||||
width: 120px;
|
|
||||||
margin-bottom: 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
h1 {
|
|
||||||
@include font-size(34);
|
|
||||||
font-weight: 800;
|
|
||||||
line-height: 1.2;
|
|
||||||
margin-bottom: 2px;
|
|
||||||
color: $text;
|
|
||||||
}
|
|
||||||
|
|
||||||
h2 {
|
|
||||||
@include font-size(23);
|
|
||||||
font-weight: 500;
|
|
||||||
margin-bottom: 50px;
|
|
||||||
color: $text;
|
|
||||||
}
|
|
||||||
|
|
||||||
.block-form {
|
|
||||||
margin-left: auto;
|
|
||||||
margin-right: auto;
|
|
||||||
|
|
||||||
.block-wrapper label {
|
|
||||||
text-align: right;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@media only screen and (min-width: 690px) and (max-width: 960px) {
|
|
||||||
|
|
||||||
.auth-form {
|
|
||||||
padding-left: 20%;
|
|
||||||
padding-right: 20%;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@media only screen and (max-width: 690px) {
|
|
||||||
|
|
||||||
.auth-form {
|
|
||||||
width: 100%;
|
|
||||||
|
|
||||||
h1 {
|
|
||||||
@include font-size(30);
|
|
||||||
}
|
|
||||||
|
|
||||||
h2 {
|
|
||||||
@include font-size(21);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (prefers-color-scheme: dark) {
|
|
||||||
.auth-form {
|
|
||||||
|
|
||||||
h1, h2, .additional-link {
|
|
||||||
color: $dark_mode_text_primary;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
@@ -26,7 +26,10 @@
|
|||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
goHome() {
|
goHome() {
|
||||||
if (this.isSmallAppSize) events.$emit('show:sidebar')
|
if (this.isSmallAppSize) {
|
||||||
|
events.$emit('show:sidebar')
|
||||||
|
this.$router.push({name: 'Files'})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-2
@@ -1,11 +1,12 @@
|
|||||||
<template>
|
<template>
|
||||||
<transition name="sidebar">
|
<transition name="sidebar">
|
||||||
<div id="sidebar" v-if="isVisibleSidebar || ! isSmallAppSize">
|
<div id="sidebar" v-if="app && (isVisibleSidebar || ! isSmallAppSize)">
|
||||||
|
|
||||||
<!--User Headline-->
|
<!--User Headline-->
|
||||||
<UserHeadline/>
|
<UserHeadline/>
|
||||||
|
|
||||||
<div v-if="app" class="content-scroller">
|
<!--Content-->
|
||||||
|
<div class="content-scroller">
|
||||||
|
|
||||||
<!--Locations-->
|
<!--Locations-->
|
||||||
<div class="menu-list-wrapper">
|
<div class="menu-list-wrapper">
|
||||||
@@ -63,6 +64,7 @@
|
|||||||
<!--Storage Size Info-->
|
<!--Storage Size Info-->
|
||||||
<StorageSize v-if="config.storageLimit"/>
|
<StorageSize v-if="config.storageLimit"/>
|
||||||
|
|
||||||
|
<!--Mobile logout button-->
|
||||||
<div v-if="isSmallAppSize" class="log-out-button">
|
<div v-if="isSmallAppSize" class="log-out-button">
|
||||||
<ButtonBase @click.native="$store.dispatch('logOut')" button-style="danger">{{ $t('context_menu.log_out') }}</ButtonBase>
|
<ButtonBase @click.native="$store.dispatch('logOut')" button-style="danger">{{ $t('context_menu.log_out') }}</ButtonBase>
|
||||||
</div>
|
</div>
|
||||||
@@ -12,7 +12,11 @@
|
|||||||
<transition name="user-menu">
|
<transition name="user-menu">
|
||||||
<div class="user-menu" v-if="isOpenedMenu">
|
<div class="user-menu" v-if="isOpenedMenu">
|
||||||
<ul class="menu-options" id="menu-options-list" @click="closeMenu">
|
<ul class="menu-options" id="menu-options-list" @click="closeMenu">
|
||||||
<li class="menu-option" @click="$goToView('user-settings')">{{ $t('context_menu.profile_settings') }}</li>
|
<li class="menu-option">
|
||||||
|
<router-link :to="{name: 'Profile'}">
|
||||||
|
{{ $t('context_menu.profile_settings') }}
|
||||||
|
</router-link>
|
||||||
|
</li>
|
||||||
<li class="menu-option" @click="$store.dispatch('logOut')">{{ $t('context_menu.log_out') }}</li>
|
<li class="menu-option" @click="$store.dispatch('logOut')">{{ $t('context_menu.log_out') }}</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
@@ -43,7 +47,7 @@
|
|||||||
// If is mobile, then go to user settings page, else, open menu
|
// If is mobile, then go to user settings page, else, open menu
|
||||||
if ( this.isSmallAppSize ) {
|
if ( this.isSmallAppSize ) {
|
||||||
|
|
||||||
this.$goToView('user-settings')
|
this.$router.push({name: 'Profile'})
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
this.isOpenedMenu = !this.isOpenedMenu
|
this.isOpenedMenu = !this.isOpenedMenu
|
||||||
@@ -147,6 +151,11 @@
|
|||||||
width: 100%;
|
width: 100%;
|
||||||
color: $text;
|
color: $text;
|
||||||
|
|
||||||
|
a {
|
||||||
|
text-decoration: none;
|
||||||
|
color: $text;
|
||||||
|
}
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
background: $light_background;
|
background: $light_background;
|
||||||
color: $theme;
|
color: $theme;
|
||||||
|
|||||||
Vendored
-6
@@ -6,12 +6,6 @@ import axios from 'axios'
|
|||||||
const Helpers = {
|
const Helpers = {
|
||||||
install(Vue) {
|
install(Vue) {
|
||||||
|
|
||||||
Vue.prototype.$goToView = function(view) {
|
|
||||||
events.$emit('show:content')
|
|
||||||
|
|
||||||
this.$store.commit('SET_CURRENT_VIEW', view)
|
|
||||||
}
|
|
||||||
|
|
||||||
Vue.prototype.$updateText = debounce(function (route, name, value) {
|
Vue.prototype.$updateText = debounce(function (route, name, value) {
|
||||||
|
|
||||||
if (value === '') return
|
if (value === '') return
|
||||||
|
|||||||
Vendored
+2
-2
@@ -4,7 +4,7 @@ import VueRouter from 'vue-router'
|
|||||||
import router from './router'
|
import router from './router'
|
||||||
import i18n from './i18n/index.js'
|
import i18n from './i18n/index.js'
|
||||||
import App from './App.vue'
|
import App from './App.vue'
|
||||||
import store from './store/index'
|
import store from './store'
|
||||||
import Helpers from './helpers'
|
import Helpers from './helpers'
|
||||||
import { library } from '@fortawesome/fontawesome-svg-core'
|
import { library } from '@fortawesome/fontawesome-svg-core'
|
||||||
import { FontAwesomeIcon } from '@fortawesome/vue-fontawesome'
|
import { FontAwesomeIcon } from '@fortawesome/vue-fontawesome'
|
||||||
@@ -72,8 +72,8 @@ Vue.config.productionTip = false
|
|||||||
|
|
||||||
var vueFileManager = new Vue({
|
var vueFileManager = new Vue({
|
||||||
i18n,
|
i18n,
|
||||||
router,
|
|
||||||
store,
|
store,
|
||||||
|
router,
|
||||||
data: {
|
data: {
|
||||||
config,
|
config,
|
||||||
},
|
},
|
||||||
|
|||||||
Vendored
+58
-7
@@ -1,10 +1,14 @@
|
|||||||
import Vue from 'vue'
|
import Vue from 'vue'
|
||||||
import Router from 'vue-router'
|
import Router from 'vue-router'
|
||||||
|
import store from '@/store'
|
||||||
|
|
||||||
import Index from './views/Index'
|
import Index from './views/Auth/SignIn'
|
||||||
import SignUp from './views/SignUp'
|
import SignUp from './views/Auth/SignUp'
|
||||||
import ForgottenPassword from './views/ForgottenPassword'
|
import ForgottenPassword from './views/Auth/ForgottenPassword'
|
||||||
//import ForgottenPassword from './views/ForgottenPassword'
|
import CreateNewPassword from './views/Auth/CreateNewPassword'
|
||||||
|
|
||||||
|
import Files from './views/Files'
|
||||||
|
import Profile from './views/Profile'
|
||||||
|
|
||||||
Vue.use(Router)
|
Vue.use(Router)
|
||||||
|
|
||||||
@@ -12,25 +16,53 @@ const router = new Router({
|
|||||||
mode: 'history',
|
mode: 'history',
|
||||||
routes: [
|
routes: [
|
||||||
{
|
{
|
||||||
name: 'index',
|
name: 'SignIn',
|
||||||
path: '/',
|
path: '/',
|
||||||
component: Index,
|
component: Index,
|
||||||
|
meta: {
|
||||||
|
requiresAuth: false
|
||||||
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'SignUp',
|
name: 'SignUp',
|
||||||
path: '/sign-up',
|
path: '/sign-up',
|
||||||
component: SignUp,
|
component: SignUp,
|
||||||
|
meta: {
|
||||||
|
requiresAuth: false
|
||||||
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'ForgottenPassword',
|
name: 'ForgottenPassword',
|
||||||
path: '/forgotten-password',
|
path: '/forgotten-password',
|
||||||
component: ForgottenPassword,
|
component: ForgottenPassword,
|
||||||
|
meta: {
|
||||||
|
requiresAuth: false
|
||||||
|
},
|
||||||
},
|
},
|
||||||
/*{
|
{
|
||||||
name: 'CreateNewPassword',
|
name: 'CreateNewPassword',
|
||||||
path: '/create-new-password',
|
path: '/create-new-password',
|
||||||
component: CreateNewPassword,
|
component: CreateNewPassword,
|
||||||
},*/
|
meta: {
|
||||||
|
requiresAuth: false
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'Files',
|
||||||
|
path: '/files',
|
||||||
|
component: Files,
|
||||||
|
meta: {
|
||||||
|
requiresAuth: true
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'Profile',
|
||||||
|
path: '/profile',
|
||||||
|
component: Profile,
|
||||||
|
meta: {
|
||||||
|
requiresAuth: true
|
||||||
|
},
|
||||||
|
},
|
||||||
],
|
],
|
||||||
scrollBehavior(to, from, savedPosition) {
|
scrollBehavior(to, from, savedPosition) {
|
||||||
|
|
||||||
@@ -39,6 +71,25 @@ const router = new Router({
|
|||||||
} else {
|
} else {
|
||||||
return {x: 0, y: 0}
|
return {x: 0, y: 0}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
router.beforeEach((to, from, next) => {
|
||||||
|
|
||||||
|
if (to.matched.some(record => record.meta.requiresAuth)) {
|
||||||
|
// this route requires auth, check if logged in
|
||||||
|
// if not, redirect to login page.
|
||||||
|
|
||||||
|
if ( ! store.getters.isLogged || ! config.hasAuthCookie) {
|
||||||
|
next({
|
||||||
|
name: 'SignIn',
|
||||||
|
query: { redirect: to.fullPath }
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
next()
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
next() // make sure to always call next()!
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
Vendored
-5
@@ -1,5 +1,4 @@
|
|||||||
const defaultState = {
|
const defaultState = {
|
||||||
currentView: 'files',
|
|
||||||
appSize: undefined,
|
appSize: undefined,
|
||||||
config: undefined,
|
config: undefined,
|
||||||
}
|
}
|
||||||
@@ -10,15 +9,11 @@ const mutations = {
|
|||||||
SET_CONFIG(state, config) {
|
SET_CONFIG(state, config) {
|
||||||
state.config = config
|
state.config = config
|
||||||
},
|
},
|
||||||
SET_CURRENT_VIEW(state, view) {
|
|
||||||
state.currentView = view
|
|
||||||
},
|
|
||||||
SET_APP_WIDTH(state, scale) {
|
SET_APP_WIDTH(state, scale) {
|
||||||
state.appSize = scale
|
state.appSize = scale
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
const getters = {
|
const getters = {
|
||||||
currentView: state => state.currentView,
|
|
||||||
appSize: state => state.appSize,
|
appSize: state => state.appSize,
|
||||||
api: state => state.config.api,
|
api: state => state.config.api,
|
||||||
config: state => state.config,
|
config: state => state.config,
|
||||||
|
|||||||
+5
-4
@@ -1,6 +1,7 @@
|
|||||||
import axios from 'axios'
|
import axios from 'axios'
|
||||||
import {events} from '@/bus'
|
import {events} from '@/bus'
|
||||||
import i18n from '@/i18n/index.js'
|
import i18n from '@/i18n/index.js'
|
||||||
|
import router from '@/router'
|
||||||
|
|
||||||
const defaultState = {
|
const defaultState = {
|
||||||
fileInfoPanelVisible: localStorage.getItem('file_info_visibility') == 'true' || false,
|
fileInfoPanelVisible: localStorage.getItem('file_info_visibility') == 'true' || false,
|
||||||
@@ -22,8 +23,8 @@ const actions = {
|
|||||||
events.$emit('show:content')
|
events.$emit('show:content')
|
||||||
|
|
||||||
// Go to files view
|
// Go to files view
|
||||||
if (context.getters.currentView !== 'files') {
|
if (router.currentRoute.name !== 'Files') {
|
||||||
context.commit('SET_CURRENT_VIEW', 'files')
|
router.push({name: 'Files'})
|
||||||
}
|
}
|
||||||
|
|
||||||
context.commit('LOADING_STATE', true)
|
context.commit('LOADING_STATE', true)
|
||||||
@@ -72,8 +73,8 @@ const actions = {
|
|||||||
events.$emit('show:content')
|
events.$emit('show:content')
|
||||||
|
|
||||||
// Go to files view
|
// Go to files view
|
||||||
if (context.getters.currentView !== 'files') {
|
if (router.currentRoute.name !== 'Files') {
|
||||||
context.commit('SET_CURRENT_VIEW', 'files')
|
router.push({name: 'Files'})
|
||||||
}
|
}
|
||||||
|
|
||||||
if (! back) context.commit('FLUSH_BROWSER_HISTORY')
|
if (! back) context.commit('FLUSH_BROWSER_HISTORY')
|
||||||
|
|||||||
+6
-1
@@ -1,11 +1,13 @@
|
|||||||
import axios from 'axios'
|
import axios from 'axios'
|
||||||
import {events} from '@/bus'
|
import {events} from '@/bus'
|
||||||
import i18n from '@/i18n/index.js'
|
import i18n from '@/i18n/index.js'
|
||||||
|
import router from '@/router'
|
||||||
|
|
||||||
const defaultState = {
|
const defaultState = {
|
||||||
authorized: undefined,
|
authorized: undefined,
|
||||||
app: undefined,
|
app: undefined,
|
||||||
}
|
}
|
||||||
|
|
||||||
const actions = {
|
const actions = {
|
||||||
getAppData: ({commit, dispatch, getters}) => {
|
getAppData: ({commit, dispatch, getters}) => {
|
||||||
|
|
||||||
@@ -29,7 +31,8 @@ const actions = {
|
|||||||
|
|
||||||
// Commit Remove Access Token from vuex storage
|
// Commit Remove Access Token from vuex storage
|
||||||
commit('DESTROY_DATA')
|
commit('DESTROY_DATA')
|
||||||
commit('SET_CURRENT_VIEW', 'files')
|
|
||||||
|
router.push({name: 'SignIn'})
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
addToFavourites: (context, folder) => {
|
addToFavourites: (context, folder) => {
|
||||||
@@ -85,6 +88,7 @@ const actions = {
|
|||||||
|
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
const mutations = {
|
const mutations = {
|
||||||
RETRIEVE_APP_DATA(state, app) {
|
RETRIEVE_APP_DATA(state, app) {
|
||||||
state.app = app
|
state.app = app
|
||||||
@@ -132,6 +136,7 @@ const mutations = {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const getters = {
|
const getters = {
|
||||||
isLogged: state => state.authorized,
|
isLogged: state => state.authorized,
|
||||||
isGuest: state => ! state.authorized,
|
isGuest: state => ! state.authorized,
|
||||||
|
|||||||
@@ -0,0 +1,177 @@
|
|||||||
|
<template>
|
||||||
|
<AuthContentWrapper ref="auth">
|
||||||
|
|
||||||
|
<!--Create new password-->
|
||||||
|
<AuthContent name="create-new-password" :visible="true">
|
||||||
|
<img class="logo" :src="config.app_logo" :alt="config.app_name">
|
||||||
|
<h1>{{ $t('page_create_password.title') }}</h1>
|
||||||
|
<h2>{{ $t('page_create_password.subtitle') }}</h2>
|
||||||
|
|
||||||
|
<ValidationObserver @submit.prevent="createNewPassword" ref="create_new_password" v-slot="{ invalid }"
|
||||||
|
tag="form" class="form block-form create-new-password">
|
||||||
|
|
||||||
|
<div class="block-wrapper">
|
||||||
|
<label>{{ $t('page_create_password.label_email') }}</label>
|
||||||
|
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="E-Mail" rules="required"
|
||||||
|
v-slot="{ errors }">
|
||||||
|
<input v-model="recoverPassword.email" :placeholder="$t('page_login.placeholder_email')" type="email"
|
||||||
|
:class="{'is-error': errors[0]}"/>
|
||||||
|
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
|
||||||
|
</ValidationProvider>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="block-wrapper">
|
||||||
|
<label>{{ $t('page_create_password.label_new_pass') }}:</label>
|
||||||
|
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="New Password"
|
||||||
|
rules="required" v-slot="{ errors }">
|
||||||
|
<input v-model="recoverPassword.newPassword" :placeholder="$t('page_create_password.label_new_pass')" type="password"
|
||||||
|
:class="{'is-error': errors[0]}"/>
|
||||||
|
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
|
||||||
|
</ValidationProvider>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="block-wrapper">
|
||||||
|
<label>{{ $t('page_create_password.label_confirm_pass') }}:</label>
|
||||||
|
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Confirm Password"
|
||||||
|
rules="required" v-slot="{ errors }">
|
||||||
|
<input v-model="recoverPassword.newPasswordConfirm" :placeholder="$t('page_create_password.label_confirm_pass')"
|
||||||
|
type="password" :class="{'is-error': errors[0]}"/>
|
||||||
|
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
|
||||||
|
</ValidationProvider>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<AuthButton icon="chevron-right" :text="$t('page_create_password.button_update')" :loading="isLoading" :disabled="isLoading"/>
|
||||||
|
</div>
|
||||||
|
</ValidationObserver>
|
||||||
|
|
||||||
|
<span class="additional-link">{{ $t('page_forgotten_password.password_remember_text') }}
|
||||||
|
<router-link :to="{name: 'SignIn'}">
|
||||||
|
{{ $t('page_forgotten_password.password_remember_button') }}
|
||||||
|
</router-link>
|
||||||
|
</span>
|
||||||
|
</AuthContent>
|
||||||
|
|
||||||
|
<!--Password reset successfully-->
|
||||||
|
<AuthContent name="password-reset-successfully" :visible="false">
|
||||||
|
<img class="logo" :src="config.app_logo" :alt="config.app_name">
|
||||||
|
<h1>{{ $t('page_forgotten_password.pass_reseted_title') }}</h1>
|
||||||
|
<h2>{{ $t('page_forgotten_password.pass_reseted_subtitle') }}</h2>
|
||||||
|
|
||||||
|
<router-link :to="{name: 'SignIn'}">
|
||||||
|
<AuthButton icon="chevron-right" :text="$t('page_forgotten_password.pass_reseted_signin')"/>
|
||||||
|
</router-link>
|
||||||
|
</AuthContent>
|
||||||
|
</AuthContentWrapper>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import AuthContentWrapper from '@/components/VueFileManagerComponents/Auth/AuthContentWrapper'
|
||||||
|
import {ValidationProvider, ValidationObserver} from 'vee-validate/dist/vee-validate.full'
|
||||||
|
import AuthContent from '@/components/VueFileManagerComponents/Auth/AuthContent'
|
||||||
|
import AuthButton from '@/components/VueFileManagerComponents/Auth/AuthButton'
|
||||||
|
import {required} from 'vee-validate/dist/rules'
|
||||||
|
import {mapGetters} from 'vuex'
|
||||||
|
import axios from 'axios'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'CreateNewPassword',
|
||||||
|
components: {
|
||||||
|
AuthContentWrapper,
|
||||||
|
ValidationProvider,
|
||||||
|
ValidationObserver,
|
||||||
|
AuthContent,
|
||||||
|
AuthButton,
|
||||||
|
required,
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
...mapGetters(['config']),
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
isLoading: false,
|
||||||
|
recoverPassword: {
|
||||||
|
token: undefined,
|
||||||
|
email: '',
|
||||||
|
newPassword: '',
|
||||||
|
newPasswordConfirm: '',
|
||||||
|
},
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
goToAuthPage(slug) {
|
||||||
|
|
||||||
|
this.$refs.auth.$children.forEach(page => {
|
||||||
|
|
||||||
|
// Hide current step
|
||||||
|
page.isVisible = false
|
||||||
|
|
||||||
|
if (page.$props.name === slug) {
|
||||||
|
|
||||||
|
// Go to next step
|
||||||
|
page.isVisible = true
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
async createNewPassword() {
|
||||||
|
|
||||||
|
// Validate fields
|
||||||
|
const isValid = await this.$refs.create_new_password.validate();
|
||||||
|
|
||||||
|
if (!isValid) return;
|
||||||
|
|
||||||
|
// Start loading
|
||||||
|
this.isLoading = true
|
||||||
|
|
||||||
|
// Send request to get user reset link
|
||||||
|
axios
|
||||||
|
.post(this.$store.getters.api + '/password/reset', {
|
||||||
|
email: this.recoverPassword.email,
|
||||||
|
token: this.recoverPassword.token,
|
||||||
|
password: this.recoverPassword.newPassword,
|
||||||
|
password_confirmation: this.recoverPassword.newPasswordConfirm,
|
||||||
|
})
|
||||||
|
.then(() => {
|
||||||
|
|
||||||
|
// End loading
|
||||||
|
this.isLoading = false
|
||||||
|
|
||||||
|
this.goToAuthPage('password-reset-successfully')
|
||||||
|
})
|
||||||
|
.catch(error => {
|
||||||
|
|
||||||
|
if (error.response.status == 422) {
|
||||||
|
|
||||||
|
if (error.response.data.error) {
|
||||||
|
|
||||||
|
this.$refs.create_new_password.setErrors({
|
||||||
|
'E-Mail': error.response.data.error
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (error.response.data.errors['password']) {
|
||||||
|
|
||||||
|
this.$refs.create_new_password.setErrors({
|
||||||
|
'New Password': error.response.data.errors['password']
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// End loading
|
||||||
|
this.isLoading = false
|
||||||
|
})
|
||||||
|
},
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
|
||||||
|
// Get token
|
||||||
|
this.recoverPassword.token = this.$route.params.token
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
@import "@assets/app.scss";
|
||||||
|
@import '@assets/vue-file-manager/_forms';
|
||||||
|
@import '@assets/vue-file-manager/_auth';
|
||||||
|
</style>
|
||||||
+13
-83
@@ -19,7 +19,11 @@
|
|||||||
<AuthButton icon="chevron-right" :text="$t('page_forgotten_password.button_get_link')" :loading="isLoading" :disabled="isLoading"/>
|
<AuthButton icon="chevron-right" :text="$t('page_forgotten_password.button_get_link')" :loading="isLoading" :disabled="isLoading"/>
|
||||||
</ValidationObserver>
|
</ValidationObserver>
|
||||||
|
|
||||||
<span class="additional-link">{{ $t('page_forgotten_password.password_remember_text') }} <b @click="goToAuthPage('log-in')">{{ $t('page_forgotten_password.password_remember_button') }}</b></span>
|
<span class="additional-link">{{ $t('page_forgotten_password.password_remember_text') }}
|
||||||
|
<router-link :to="{name: 'SignIn'}">
|
||||||
|
{{ $t('page_forgotten_password.password_remember_button') }}
|
||||||
|
</router-link>
|
||||||
|
</span>
|
||||||
</AuthContent>
|
</AuthContent>
|
||||||
|
|
||||||
<!--Password reset link sended-->
|
<!--Password reset link sended-->
|
||||||
@@ -28,7 +32,11 @@
|
|||||||
<h1>{{ $t('page_forgotten_password.pass_sennded_title') }}</h1>
|
<h1>{{ $t('page_forgotten_password.pass_sennded_title') }}</h1>
|
||||||
<h2>{{ $t('page_forgotten_password.pass_sennded_subtitle') }}</h2>
|
<h2>{{ $t('page_forgotten_password.pass_sennded_subtitle') }}</h2>
|
||||||
|
|
||||||
<span class="additional-link">{{ $t('page_forgotten_password.password_remember_text') }} <b @click="goToAuthPage('log-in')">{{ $t('page_forgotten_password.password_remember_button') }}</b></span>
|
<span class="additional-link">{{ $t('page_forgotten_password.password_remember_text') }}
|
||||||
|
<router-link :to="{name: 'SignIn'}">
|
||||||
|
{{ $t('page_forgotten_password.password_remember_button') }}
|
||||||
|
</router-link>
|
||||||
|
</span>
|
||||||
</AuthContent>
|
</AuthContent>
|
||||||
</AuthContentWrapper>
|
</AuthContentWrapper>
|
||||||
</template>
|
</template>
|
||||||
@@ -43,7 +51,7 @@
|
|||||||
import axios from 'axios'
|
import axios from 'axios'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'Auth',
|
name: 'ForgottenPassword',
|
||||||
components: {
|
components: {
|
||||||
AuthContentWrapper,
|
AuthContentWrapper,
|
||||||
ValidationProvider,
|
ValidationProvider,
|
||||||
@@ -88,7 +96,7 @@
|
|||||||
|
|
||||||
// Send request to get user reset link
|
// Send request to get user reset link
|
||||||
axios
|
axios
|
||||||
.post(this.$store.getters.api + '/password/email', {
|
.post('/api/password/email', {
|
||||||
email: this.recoverEmail
|
email: this.recoverEmail
|
||||||
})
|
})
|
||||||
.then(() => {
|
.then(() => {
|
||||||
@@ -116,83 +124,5 @@
|
|||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
@import "@assets/app.scss";
|
@import "@assets/app.scss";
|
||||||
@import '@assets/vue-file-manager/_forms';
|
@import '@assets/vue-file-manager/_forms';
|
||||||
|
@import '@assets/vue-file-manager/_auth';
|
||||||
.auth-form {
|
|
||||||
text-align: center;
|
|
||||||
max-width: 600px;
|
|
||||||
padding: 25px 20px;
|
|
||||||
display: table-cell;
|
|
||||||
vertical-align: middle;
|
|
||||||
|
|
||||||
.user-avatar {
|
|
||||||
width: 100px;
|
|
||||||
height: 100px;
|
|
||||||
object-fit: cover;
|
|
||||||
margin-bottom: 20px;
|
|
||||||
border-radius: 8px;
|
|
||||||
box-shadow: 0 10px 30px rgba(25, 54, 60, 0.2);
|
|
||||||
}
|
|
||||||
|
|
||||||
.logo {
|
|
||||||
width: 120px;
|
|
||||||
margin-bottom: 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
h1 {
|
|
||||||
@include font-size(34);
|
|
||||||
font-weight: 800;
|
|
||||||
line-height: 1.2;
|
|
||||||
margin-bottom: 2px;
|
|
||||||
color: $text;
|
|
||||||
}
|
|
||||||
|
|
||||||
h2 {
|
|
||||||
@include font-size(23);
|
|
||||||
font-weight: 500;
|
|
||||||
margin-bottom: 50px;
|
|
||||||
color: $text;
|
|
||||||
}
|
|
||||||
|
|
||||||
.block-form {
|
|
||||||
margin-left: auto;
|
|
||||||
margin-right: auto;
|
|
||||||
|
|
||||||
.block-wrapper label {
|
|
||||||
text-align: right;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@media only screen and (min-width: 690px) and (max-width: 960px) {
|
|
||||||
|
|
||||||
.auth-form {
|
|
||||||
padding-left: 20%;
|
|
||||||
padding-right: 20%;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@media only screen and (max-width: 690px) {
|
|
||||||
|
|
||||||
.auth-form {
|
|
||||||
width: 100%;
|
|
||||||
|
|
||||||
h1 {
|
|
||||||
@include font-size(30);
|
|
||||||
}
|
|
||||||
|
|
||||||
h2 {
|
|
||||||
@include font-size(21);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (prefers-color-scheme: dark) {
|
|
||||||
.auth-form {
|
|
||||||
|
|
||||||
h1, h2, .additional-link {
|
|
||||||
color: $dark_mode_text_primary;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
@@ -16,11 +16,15 @@
|
|||||||
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
|
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
|
||||||
</ValidationProvider>
|
</ValidationProvider>
|
||||||
|
|
||||||
<AuthButton icon="chevron-right" :text="$t('page_login.button_next')" :loading="isLoading" :disabled="isLoading"/>
|
<AuthButton icon="chevron-right" :text="$t('page_login.button_next')" :loading="isLoading"
|
||||||
|
:disabled="isLoading"/>
|
||||||
</ValidationObserver>
|
</ValidationObserver>
|
||||||
|
|
||||||
<span v-if="config.userRegistration" class="additional-link">{{ $t('page_login.registration_text') }} <b
|
<span v-if="config.userRegistration" class="additional-link">{{ $t('page_login.registration_text') }}
|
||||||
@click="goToAuthPage('sign-up')">{{ $t('page_login.registration_button') }}</b></span>
|
<router-link :to="{name: 'SignUp'}">
|
||||||
|
{{ $t('page_login.registration_button') }}
|
||||||
|
</router-link>
|
||||||
|
</span>
|
||||||
</AuthContent>
|
</AuthContent>
|
||||||
|
|
||||||
<!--Log in By Password-->
|
<!--Log in By Password-->
|
||||||
@@ -36,15 +40,21 @@
|
|||||||
class="form inline-form">
|
class="form inline-form">
|
||||||
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="User Password" rules="required"
|
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="User Password" rules="required"
|
||||||
v-slot="{ errors }">
|
v-slot="{ errors }">
|
||||||
<input v-model="loginPassword" :placeholder="$t('page_sign_in.placeholder_password')" type="password"
|
<input v-model="loginPassword" :placeholder="$t('page_sign_in.placeholder_password')"
|
||||||
|
type="password"
|
||||||
:class="{'is-error': errors[0]}"/>
|
:class="{'is-error': errors[0]}"/>
|
||||||
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
|
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
|
||||||
</ValidationProvider>
|
</ValidationProvider>
|
||||||
|
|
||||||
<AuthButton icon="chevron-right" :text="$t('page_sign_in.button_log_in')" :loading="isLoading" :disabled="isLoading"/>
|
<AuthButton icon="chevron-right" :text="$t('page_sign_in.button_log_in')" :loading="isLoading"
|
||||||
|
:disabled="isLoading"/>
|
||||||
</ValidationObserver>
|
</ValidationObserver>
|
||||||
|
|
||||||
<span class="additional-link">{{ $t('page_sign_in.password_reset_text') }} <b @click="goToAuthPage('forgotten-password')">{{ $t('page_sign_in.password_reset_button') }}</b></span>
|
<span class="additional-link">{{ $t('page_sign_in.password_reset_text') }}
|
||||||
|
<router-link :to="{name: 'ForgottenPassword'}">
|
||||||
|
{{ $t('page_sign_in.password_reset_button') }}
|
||||||
|
</router-link>
|
||||||
|
</span>
|
||||||
</AuthContent>
|
</AuthContent>
|
||||||
</AuthContentWrapper>
|
</AuthContentWrapper>
|
||||||
</template>
|
</template>
|
||||||
@@ -59,7 +69,7 @@
|
|||||||
import axios from 'axios'
|
import axios from 'axios'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'Auth',
|
name: 'SignIn',
|
||||||
components: {
|
components: {
|
||||||
AuthContentWrapper,
|
AuthContentWrapper,
|
||||||
ValidationProvider,
|
ValidationProvider,
|
||||||
@@ -75,8 +85,8 @@
|
|||||||
return {
|
return {
|
||||||
isLoading: false,
|
isLoading: false,
|
||||||
checkedAccount: undefined,
|
checkedAccount: undefined,
|
||||||
loginPassword: '',
|
loginPassword: 'vuefilemanager',
|
||||||
loginEmail: '',
|
loginEmail: 'howdy@hi5ve.digital',
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
@@ -106,7 +116,7 @@
|
|||||||
|
|
||||||
// Send request to get verify account
|
// Send request to get verify account
|
||||||
axios
|
axios
|
||||||
.post(this.$store.getters.api + '/user/check', {
|
.post('/api/user/check', {
|
||||||
email: this.loginEmail,
|
email: this.loginEmail,
|
||||||
})
|
})
|
||||||
.then(response => {
|
.then(response => {
|
||||||
@@ -115,6 +125,8 @@
|
|||||||
this.isLoading = false
|
this.isLoading = false
|
||||||
|
|
||||||
this.checkedAccount = response.data
|
this.checkedAccount = response.data
|
||||||
|
|
||||||
|
// Show sign in password page
|
||||||
this.goToAuthPage('sign-in')
|
this.goToAuthPage('sign-in')
|
||||||
})
|
})
|
||||||
.catch(error => {
|
.catch(error => {
|
||||||
@@ -142,7 +154,7 @@
|
|||||||
|
|
||||||
// Send request to get user token
|
// Send request to get user token
|
||||||
axios
|
axios
|
||||||
.post(this.$store.getters.api + '/user/login', {
|
.post('/api/user/login', {
|
||||||
email: this.loginEmail,
|
email: this.loginEmail,
|
||||||
password: this.loginPassword,
|
password: this.loginPassword,
|
||||||
})
|
})
|
||||||
@@ -153,6 +165,9 @@
|
|||||||
|
|
||||||
// Set login state
|
// Set login state
|
||||||
this.$store.commit('SET_AUTHORIZED', true)
|
this.$store.commit('SET_AUTHORIZED', true)
|
||||||
|
|
||||||
|
// Go to files page
|
||||||
|
this.$router.push({name: 'Files'})
|
||||||
})
|
})
|
||||||
.catch(error => {
|
.catch(error => {
|
||||||
|
|
||||||
@@ -167,90 +182,12 @@
|
|||||||
this.isLoading = false
|
this.isLoading = false
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
}
|
},
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
@import "@assets/app.scss";
|
@import "@assets/app.scss";
|
||||||
@import '@assets/vue-file-manager/_forms';
|
@import '@assets/vue-file-manager/_forms';
|
||||||
|
@import '@assets/vue-file-manager/_auth';
|
||||||
.auth-form {
|
|
||||||
text-align: center;
|
|
||||||
max-width: 600px;
|
|
||||||
padding: 25px 20px;
|
|
||||||
display: table-cell;
|
|
||||||
vertical-align: middle;
|
|
||||||
|
|
||||||
.user-avatar {
|
|
||||||
width: 100px;
|
|
||||||
height: 100px;
|
|
||||||
object-fit: cover;
|
|
||||||
margin-bottom: 20px;
|
|
||||||
border-radius: 8px;
|
|
||||||
box-shadow: 0 10px 30px rgba(25, 54, 60, 0.2);
|
|
||||||
}
|
|
||||||
|
|
||||||
.logo {
|
|
||||||
width: 120px;
|
|
||||||
margin-bottom: 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
h1 {
|
|
||||||
@include font-size(34);
|
|
||||||
font-weight: 800;
|
|
||||||
line-height: 1.2;
|
|
||||||
margin-bottom: 2px;
|
|
||||||
color: $text;
|
|
||||||
}
|
|
||||||
|
|
||||||
h2 {
|
|
||||||
@include font-size(23);
|
|
||||||
font-weight: 500;
|
|
||||||
margin-bottom: 50px;
|
|
||||||
color: $text;
|
|
||||||
}
|
|
||||||
|
|
||||||
.block-form {
|
|
||||||
margin-left: auto;
|
|
||||||
margin-right: auto;
|
|
||||||
|
|
||||||
.block-wrapper label {
|
|
||||||
text-align: right;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@media only screen and (min-width: 690px) and (max-width: 960px) {
|
|
||||||
|
|
||||||
.auth-form {
|
|
||||||
padding-left: 20%;
|
|
||||||
padding-right: 20%;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@media only screen and (max-width: 690px) {
|
|
||||||
|
|
||||||
.auth-form {
|
|
||||||
width: 100%;
|
|
||||||
|
|
||||||
h1 {
|
|
||||||
@include font-size(30);
|
|
||||||
}
|
|
||||||
|
|
||||||
h2 {
|
|
||||||
@include font-size(21);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (prefers-color-scheme: dark) {
|
|
||||||
.auth-form {
|
|
||||||
|
|
||||||
h1, h2, .additional-link {
|
|
||||||
color: $dark_mode_text_primary;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
@@ -55,7 +55,11 @@
|
|||||||
</div>
|
</div>
|
||||||
</ValidationObserver>
|
</ValidationObserver>
|
||||||
|
|
||||||
<span class="additional-link">{{ $t('page_registration.have_an_account') }} <b @click="goToAuthPage('log-in')">{{ $t('page_forgotten_password.password_remember_button') }}</b></span>
|
<span class="additional-link">{{ $t('page_registration.have_an_account') }}
|
||||||
|
<router-link :to="{name: 'SignIn'}">
|
||||||
|
{{ $t('page_forgotten_password.password_remember_button') }}
|
||||||
|
</router-link>
|
||||||
|
</span>
|
||||||
</AuthContent>
|
</AuthContent>
|
||||||
|
|
||||||
</AuthContentWrapper>
|
</AuthContentWrapper>
|
||||||
@@ -71,7 +75,7 @@
|
|||||||
import axios from 'axios'
|
import axios from 'axios'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'Auth',
|
name: 'SignUp',
|
||||||
components: {
|
components: {
|
||||||
AuthContentWrapper,
|
AuthContentWrapper,
|
||||||
ValidationProvider,
|
ValidationProvider,
|
||||||
@@ -107,7 +111,7 @@
|
|||||||
|
|
||||||
// Send request to get user token
|
// Send request to get user token
|
||||||
axios
|
axios
|
||||||
.post(this.$store.getters.api + '/user/register', this.register)
|
.post('/api/user/register', this.register)
|
||||||
.then(() => {
|
.then(() => {
|
||||||
|
|
||||||
// End loading
|
// End loading
|
||||||
@@ -115,6 +119,9 @@
|
|||||||
|
|
||||||
// Set login state
|
// Set login state
|
||||||
this.$store.commit('SET_AUTHORIZED', true)
|
this.$store.commit('SET_AUTHORIZED', true)
|
||||||
|
|
||||||
|
// Go to files page
|
||||||
|
this.$router.push({name: 'Files'})
|
||||||
})
|
})
|
||||||
.catch(error => {
|
.catch(error => {
|
||||||
|
|
||||||
@@ -146,83 +153,5 @@
|
|||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
@import "@assets/app.scss";
|
@import "@assets/app.scss";
|
||||||
@import '@assets/vue-file-manager/_forms';
|
@import '@assets/vue-file-manager/_forms';
|
||||||
|
@import '@assets/vue-file-manager/_auth';
|
||||||
.auth-form {
|
|
||||||
text-align: center;
|
|
||||||
max-width: 600px;
|
|
||||||
padding: 25px 20px;
|
|
||||||
display: table-cell;
|
|
||||||
vertical-align: middle;
|
|
||||||
|
|
||||||
.user-avatar {
|
|
||||||
width: 100px;
|
|
||||||
height: 100px;
|
|
||||||
object-fit: cover;
|
|
||||||
margin-bottom: 20px;
|
|
||||||
border-radius: 8px;
|
|
||||||
box-shadow: 0 10px 30px rgba(25, 54, 60, 0.2);
|
|
||||||
}
|
|
||||||
|
|
||||||
.logo {
|
|
||||||
width: 120px;
|
|
||||||
margin-bottom: 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
h1 {
|
|
||||||
@include font-size(34);
|
|
||||||
font-weight: 800;
|
|
||||||
line-height: 1.2;
|
|
||||||
margin-bottom: 2px;
|
|
||||||
color: $text;
|
|
||||||
}
|
|
||||||
|
|
||||||
h2 {
|
|
||||||
@include font-size(23);
|
|
||||||
font-weight: 500;
|
|
||||||
margin-bottom: 50px;
|
|
||||||
color: $text;
|
|
||||||
}
|
|
||||||
|
|
||||||
.block-form {
|
|
||||||
margin-left: auto;
|
|
||||||
margin-right: auto;
|
|
||||||
|
|
||||||
.block-wrapper label {
|
|
||||||
text-align: right;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@media only screen and (min-width: 690px) and (max-width: 960px) {
|
|
||||||
|
|
||||||
.auth-form {
|
|
||||||
padding-left: 20%;
|
|
||||||
padding-right: 20%;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@media only screen and (max-width: 690px) {
|
|
||||||
|
|
||||||
.auth-form {
|
|
||||||
width: 100%;
|
|
||||||
|
|
||||||
h1 {
|
|
||||||
@include font-size(30);
|
|
||||||
}
|
|
||||||
|
|
||||||
h2 {
|
|
||||||
@include font-size(21);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (prefers-color-scheme: dark) {
|
|
||||||
.auth-form {
|
|
||||||
|
|
||||||
h1, h2, .additional-link {
|
|
||||||
color: $dark_mode_text_primary;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
Vendored
+10
@@ -5,3 +5,13 @@
|
|||||||
@import 'vue-file-manager/_variables';
|
@import 'vue-file-manager/_variables';
|
||||||
@import 'vue-file-manager/_mixins';
|
@import 'vue-file-manager/_mixins';
|
||||||
//@import 'vue-file-manager/_forms';
|
//@import 'vue-file-manager/_forms';
|
||||||
|
|
||||||
|
#application-wrapper {
|
||||||
|
display: flex;
|
||||||
|
height: 100%;
|
||||||
|
|
||||||
|
#content {
|
||||||
|
position: relative;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
+85
@@ -0,0 +1,85 @@
|
|||||||
|
.auth-form {
|
||||||
|
text-align: center;
|
||||||
|
max-width: 600px;
|
||||||
|
padding: 25px 20px;
|
||||||
|
display: table-cell;
|
||||||
|
vertical-align: middle;
|
||||||
|
|
||||||
|
.additional-link {
|
||||||
|
|
||||||
|
a {
|
||||||
|
font-weight: 700;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.user-avatar {
|
||||||
|
width: 100px;
|
||||||
|
height: 100px;
|
||||||
|
object-fit: cover;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
border-radius: 8px;
|
||||||
|
box-shadow: 0 10px 30px rgba(25, 54, 60, 0.2);
|
||||||
|
}
|
||||||
|
|
||||||
|
.logo {
|
||||||
|
width: 120px;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
@include font-size(34);
|
||||||
|
font-weight: 800;
|
||||||
|
line-height: 1.2;
|
||||||
|
margin-bottom: 2px;
|
||||||
|
color: $text;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
@include font-size(23);
|
||||||
|
font-weight: 500;
|
||||||
|
margin-bottom: 50px;
|
||||||
|
color: $text;
|
||||||
|
}
|
||||||
|
|
||||||
|
.block-form {
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
|
||||||
|
.block-wrapper label {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media only screen and (min-width: 690px) and (max-width: 960px) {
|
||||||
|
|
||||||
|
.auth-form {
|
||||||
|
padding-left: 20%;
|
||||||
|
padding-right: 20%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media only screen and (max-width: 690px) {
|
||||||
|
|
||||||
|
.auth-form {
|
||||||
|
width: 100%;
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
@include font-size(30);
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
@include font-size(21);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (prefers-color-scheme: dark) {
|
||||||
|
.auth-form {
|
||||||
|
|
||||||
|
h1, h2, .additional-link {
|
||||||
|
color: $dark_mode_text_primary;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user