- creating user frontend

This commit is contained in:
Peter Papp
2021-03-23 08:20:54 +01:00
parent 0d4b8403ba
commit 4b97c674ba
6 changed files with 631 additions and 7 deletions

View File

@@ -51,10 +51,10 @@ class PaymentRequiredNotification extends Notification
return (new MailMessage)
->subject('🏝 Potvrzeni Objednavky - OasisDrive')
->greeting('Dobry den')
->line('🏝 dekujeme za Vasi objednavku. Potvrzenim objednavky se Vas ucet automaticky zaktivuje a vytvori se Vam digitalni prostor pro Vase dulezite dokumenty.')
->line('Dekujeme za Vasi objednavku. Potvrzenim objednavky se Vas ucet automaticky zaktivuje a vytvori se Vam digitalni prostor pro Vase dulezite dokumenty.')
->line("Datovy tarif: Standard: $storage - $price")
->action('Prejst na platbu', $url)
->line('Dekujeme, Vas tym OasisDrive');
->salutation('Dekujeme, Vas tym OasisDrive');
}
/**

View File

@@ -25,7 +25,7 @@
"/chunks/contact-us~chunks/dynamic-page~chunks/homepage.js": "/chunks/contact-us~chunks/dynamic-page~chunks/homepage.js?id=5814ff43ba7c67297af1",
"/chunks/create-new-password.js": "/chunks/create-new-password.js?id=f3c8bc62f62ae537f93c",
"/chunks/dashboard.js": "/chunks/dashboard.js?id=9809887401e27ef5826e",
"/chunks/dashboard~chunks/files~chunks/invoices~chunks/pages~chunks/plans~chunks/settings-payment-meth~0bfeabca.js": "/chunks/dashboard~chunks/files~chunks/invoices~chunks/pages~chunks/plans~chunks/settings-payment-meth~0bfeabca.js?id=c3c1a252593a1b95eb0f",
"/chunks/dashboard~chunks/files~chunks/invoices~chunks/pages~chunks/plans~chunks/settings-payment-meth~0bfeabca.js": "/chunks/dashboard~chunks/files~chunks/invoices~chunks/pages~chunks/plans~chunks/settings-payment-meth~0bfeabca.js?id=1c22034c0e30c4530f3d",
"/chunks/dashboard~chunks/invoices~chunks/pages~chunks/plan-subscribers~chunks/plans~chunks/settings-i~0e2a0654.js": "/chunks/dashboard~chunks/invoices~chunks/pages~chunks/plan-subscribers~chunks/plans~chunks/settings-i~0e2a0654.js?id=859a6f034ca5697aaf60",
"/chunks/database.js": "/chunks/database.js?id=58addbf30b3b2f7c36db",
"/chunks/dynamic-page.js": "/chunks/dynamic-page.js?id=6dccc2158cc6278f683d",
@@ -78,15 +78,98 @@
"/chunks/upgrade-billing~chunks/upgrade-plan.js": "/chunks/upgrade-billing~chunks/upgrade-plan.js?id=2b555924c945cbcd23f5",
"/chunks/upgrade-plan.js": "/chunks/upgrade-plan.js?id=9c61721d5e30ef544377",
"/chunks/user.js": "/chunks/user.js?id=8e96e769d9df5c5f7364",
"/chunks/user-create.js": "/chunks/user-create.js?id=3066213dc3af06795a28",
"/chunks/user-create.js": "/chunks/user-create.js?id=421558158a756e7f87b0",
"/chunks/user-delete.js": "/chunks/user-delete.js?id=78a10edafd58a4abad26",
"/chunks/user-detail.js": "/chunks/user-detail.js?id=039a3d421f7d8b8b3ce3",
"/chunks/user-invoices.js": "/chunks/user-invoices.js?id=8da7b23dc11d9e2e6c99",
"/chunks/user-password.js": "/chunks/user-password.js?id=31bcde6d4cfb29b1c894",
"/chunks/user-storage.js": "/chunks/user-storage.js?id=f1d8f104599fa982991e",
"/chunks/user-subscription.js": "/chunks/user-subscription.js?id=3b8974eb8af615d517f4",
"/chunks/users.js": "/chunks/users.js?id=6bfd86f6bced064b44d3",
"/chunks/users.js": "/chunks/users.js?id=5a137097e3c880c7c73d",
"/vendors~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-i~68e3c6cf.js": "/vendors~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-i~68e3c6cf.js?id=b490efdc8470a6c2f625",
"/vendors~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-i~a4a4a595.js": "/vendors~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-i~a4a4a595.js?id=be99c10088b00578891b",
"/vendors~chunks/files~chunks/platform~chunks/shared~chunks/shared-files~chunks/shared/file-browser~ch~52c14f2e.js": "/vendors~chunks/files~chunks/platform~chunks/shared~chunks/shared-files~chunks/shared/file-browser~ch~52c14f2e.js?id=66afa0e341251a68c3d3"
"/vendors~chunks/files~chunks/platform~chunks/shared~chunks/shared-files~chunks/shared/file-browser~ch~52c14f2e.js": "/vendors~chunks/files~chunks/platform~chunks/shared~chunks/shared-files~chunks/shared/file-browser~ch~52c14f2e.js?id=66afa0e341251a68c3d3",
"/js/main.15462e4af4d55df66973.hot-update.js": "/js/main.15462e4af4d55df66973.hot-update.js",
"/js/main.cbbb4b7ba2d3799084b1.hot-update.js": "/js/main.cbbb4b7ba2d3799084b1.hot-update.js",
"/chunks/user-create.cbbb4b7ba2d3799084b1.hot-update.js": "/chunks/user-create.cbbb4b7ba2d3799084b1.hot-update.js",
"/chunks/user-create.54a4449fe2276fba9662.hot-update.js": "/chunks/user-create.54a4449fe2276fba9662.hot-update.js",
"/js/main.8aa438d501df2f11f4fb.hot-update.js": "/js/main.8aa438d501df2f11f4fb.hot-update.js",
"/js/main.c819f952ef8d64da2c7f.hot-update.js": "/js/main.c819f952ef8d64da2c7f.hot-update.js",
"/chunks/user-create.c819f952ef8d64da2c7f.hot-update.js": "/chunks/user-create.c819f952ef8d64da2c7f.hot-update.js",
"/js/main.3fa488b1ce9a72e510d9.hot-update.js": "/js/main.3fa488b1ce9a72e510d9.hot-update.js",
"/chunks/user-create.3fa488b1ce9a72e510d9.hot-update.js": "/chunks/user-create.3fa488b1ce9a72e510d9.hot-update.js",
"/chunks/user-create.a5516d3706d718944d86.hot-update.js": "/chunks/user-create.a5516d3706d718944d86.hot-update.js",
"/chunks/user-create.e3b89a488b7f5d464cb6.hot-update.js": "/chunks/user-create.e3b89a488b7f5d464cb6.hot-update.js",
"/js/main.2e41c3c6d72ca60cdfa5.hot-update.js": "/js/main.2e41c3c6d72ca60cdfa5.hot-update.js",
"/chunks/user-create.a71b18b949a40aa877db.hot-update.js": "/chunks/user-create.a71b18b949a40aa877db.hot-update.js",
"/chunks/user-create.919c3693ad6edad72622.hot-update.js": "/chunks/user-create.919c3693ad6edad72622.hot-update.js",
"/chunks/user-create.ff44a8c6547514b0555e.hot-update.js": "/chunks/user-create.ff44a8c6547514b0555e.hot-update.js",
"/chunks/user-create.f71649c0af0138fd392a.hot-update.js": "/chunks/user-create.f71649c0af0138fd392a.hot-update.js",
"/chunks/user-create.a0975461a82aa011ae08.hot-update.js": "/chunks/user-create.a0975461a82aa011ae08.hot-update.js",
"/chunks/user-create.22963a8eb879a70de8e8.hot-update.js": "/chunks/user-create.22963a8eb879a70de8e8.hot-update.js",
"/chunks/user-create.00fae37c8caaf9c4116c.hot-update.js": "/chunks/user-create.00fae37c8caaf9c4116c.hot-update.js",
"/chunks/user-create.bd8ce06e31babb0d83bf.hot-update.js": "/chunks/user-create.bd8ce06e31babb0d83bf.hot-update.js",
"/chunks/user-create.533a9769278591f0a35f.hot-update.js": "/chunks/user-create.533a9769278591f0a35f.hot-update.js",
"/chunks/user-create.4de58d114340c037c334.hot-update.js": "/chunks/user-create.4de58d114340c037c334.hot-update.js",
"/chunks/user-create.bc5c6db3b1f40958cee6.hot-update.js": "/chunks/user-create.bc5c6db3b1f40958cee6.hot-update.js",
"/chunks/user-create.61c4327d1b8cc3882ca3.hot-update.js": "/chunks/user-create.61c4327d1b8cc3882ca3.hot-update.js",
"/chunks/user-create.c7a824a1651301799e6f.hot-update.js": "/chunks/user-create.c7a824a1651301799e6f.hot-update.js",
"/chunks/user-create.a5037bab9efc816329c2.hot-update.js": "/chunks/user-create.a5037bab9efc816329c2.hot-update.js",
"/chunks/user-create.872040ca690570f5940a.hot-update.js": "/chunks/user-create.872040ca690570f5940a.hot-update.js",
"/chunks/user-create.ed26b4426b06a08c6c6f.hot-update.js": "/chunks/user-create.ed26b4426b06a08c6c6f.hot-update.js",
"/chunks/user-create.925215955f57702fc155.hot-update.js": "/chunks/user-create.925215955f57702fc155.hot-update.js",
"/chunks/user-create.a91d2252b68a6c00ef00.hot-update.js": "/chunks/user-create.a91d2252b68a6c00ef00.hot-update.js",
"/chunks/user-create.8d5c86849f2e3abbaa16.hot-update.js": "/chunks/user-create.8d5c86849f2e3abbaa16.hot-update.js",
"/chunks/user-create.d393a841297e7b3b49bc.hot-update.js": "/chunks/user-create.d393a841297e7b3b49bc.hot-update.js",
"/chunks/user-create.fe44ba1ff26e3a796548.hot-update.js": "/chunks/user-create.fe44ba1ff26e3a796548.hot-update.js",
"/chunks/user-create.b84bc5bf54478d757615.hot-update.js": "/chunks/user-create.b84bc5bf54478d757615.hot-update.js",
"/chunks/user-create.858d43e043ecfbf1f34e.hot-update.js": "/chunks/user-create.858d43e043ecfbf1f34e.hot-update.js",
"/chunks/user-create.ebf58013ad50ee56a3c9.hot-update.js": "/chunks/user-create.ebf58013ad50ee56a3c9.hot-update.js",
"/chunks/user-create.522c330a0f5f932859b6.hot-update.js": "/chunks/user-create.522c330a0f5f932859b6.hot-update.js",
"/chunks/user-create.d84da8c0b8db7571999d.hot-update.js": "/chunks/user-create.d84da8c0b8db7571999d.hot-update.js",
"/chunks/user-create.0a7c147f41bbd509a7bb.hot-update.js": "/chunks/user-create.0a7c147f41bbd509a7bb.hot-update.js",
"/chunks/user-create.a74b6607e7cdac972430.hot-update.js": "/chunks/user-create.a74b6607e7cdac972430.hot-update.js",
"/chunks/user-create.2f4fb0da79ad0e978ccb.hot-update.js": "/chunks/user-create.2f4fb0da79ad0e978ccb.hot-update.js",
"/chunks/user-create.5c5c4eca7bf7386f694d.hot-update.js": "/chunks/user-create.5c5c4eca7bf7386f694d.hot-update.js",
"/chunks/user-create.90b8d2a51502ba505aa0.hot-update.js": "/chunks/user-create.90b8d2a51502ba505aa0.hot-update.js",
"/chunks/user-create.375793ace33f5a7418dc.hot-update.js": "/chunks/user-create.375793ace33f5a7418dc.hot-update.js",
"/chunks/user-create.dc4df3471eeb2ed2b3d1.hot-update.js": "/chunks/user-create.dc4df3471eeb2ed2b3d1.hot-update.js",
"/chunks/user-create.0f84d6d095759bce0dbd.hot-update.js": "/chunks/user-create.0f84d6d095759bce0dbd.hot-update.js",
"/chunks/user-create.242c21dfba3203d52ef2.hot-update.js": "/chunks/user-create.242c21dfba3203d52ef2.hot-update.js",
"/chunks/user-create.266c0ca93a6735ef3a84.hot-update.js": "/chunks/user-create.266c0ca93a6735ef3a84.hot-update.js",
"/chunks/user-create.1acc9e0da68e66d210a4.hot-update.js": "/chunks/user-create.1acc9e0da68e66d210a4.hot-update.js",
"/chunks/user-create.dcb0117f4b7d769dc082.hot-update.js": "/chunks/user-create.dcb0117f4b7d769dc082.hot-update.js",
"/chunks/user-create.5dfbd0729d493c839a29.hot-update.js": "/chunks/user-create.5dfbd0729d493c839a29.hot-update.js",
"/chunks/user-create.73770f0976d9d5a25b8c.hot-update.js": "/chunks/user-create.73770f0976d9d5a25b8c.hot-update.js",
"/chunks/user-create.54ae66ab0f6535ab88fd.hot-update.js": "/chunks/user-create.54ae66ab0f6535ab88fd.hot-update.js",
"/chunks/user-create.71d6353646d0b450dc3a.hot-update.js": "/chunks/user-create.71d6353646d0b450dc3a.hot-update.js",
"/chunks/user-create.4eb624ae9661c486f5e9.hot-update.js": "/chunks/user-create.4eb624ae9661c486f5e9.hot-update.js",
"/chunks/user-create.f23c32bee25bc81f6689.hot-update.js": "/chunks/user-create.f23c32bee25bc81f6689.hot-update.js",
"/chunks/user-create.85fe12a3027d6207f6f2.hot-update.js": "/chunks/user-create.85fe12a3027d6207f6f2.hot-update.js",
"/chunks/user-create.c02151f6030597407506.hot-update.js": "/chunks/user-create.c02151f6030597407506.hot-update.js",
"/chunks/user-create.17b4bfca823d5896046d.hot-update.js": "/chunks/user-create.17b4bfca823d5896046d.hot-update.js",
"/chunks/user-create.adf62e112c213ee53ae5.hot-update.js": "/chunks/user-create.adf62e112c213ee53ae5.hot-update.js",
"/chunks/user-create.9f42e3864e1b8da68fba.hot-update.js": "/chunks/user-create.9f42e3864e1b8da68fba.hot-update.js",
"/chunks/user-create.10bb5e47f31788c3c76b.hot-update.js": "/chunks/user-create.10bb5e47f31788c3c76b.hot-update.js",
"/chunks/user-create.7d2b032edb567a50bcd8.hot-update.js": "/chunks/user-create.7d2b032edb567a50bcd8.hot-update.js",
"/chunks/user-create.8006779f958f7169e9d5.hot-update.js": "/chunks/user-create.8006779f958f7169e9d5.hot-update.js",
"/js/main.69efc639b7a35270363d.hot-update.js": "/js/main.69efc639b7a35270363d.hot-update.js",
"/chunks/user-create.69efc639b7a35270363d.hot-update.js": "/chunks/user-create.69efc639b7a35270363d.hot-update.js",
"/chunks/users.1643485e962ee8d6de38.hot-update.js": "/chunks/users.1643485e962ee8d6de38.hot-update.js",
"/chunks/users.c5edaed550eebf8241ec.hot-update.js": "/chunks/users.c5edaed550eebf8241ec.hot-update.js",
"/chunks/users.1d23b81f37ced25c5000.hot-update.js": "/chunks/users.1d23b81f37ced25c5000.hot-update.js",
"/chunks/users.95851214144197354979.hot-update.js": "/chunks/users.95851214144197354979.hot-update.js",
"/chunks/users.ebf3344fcab1a32d2b99.hot-update.js": "/chunks/users.ebf3344fcab1a32d2b99.hot-update.js",
"/chunks/user-create.c89e2097ceac3e5394d5.hot-update.js": "/chunks/user-create.c89e2097ceac3e5394d5.hot-update.js",
"/js/main.41c24977104696892944.hot-update.js": "/js/main.41c24977104696892944.hot-update.js",
"/chunks/user-create.41c24977104696892944.hot-update.js": "/chunks/user-create.41c24977104696892944.hot-update.js",
"/chunks/users.41c24977104696892944.hot-update.js": "/chunks/users.41c24977104696892944.hot-update.js",
"/chunks/users.94c5a3524848fcd48ce3.hot-update.js": "/chunks/users.94c5a3524848fcd48ce3.hot-update.js",
"/js/main.c37139a7ae727fbb4c02.hot-update.js": "/js/main.c37139a7ae727fbb4c02.hot-update.js",
"/js/main.75a7330f169a31271b4c.hot-update.js": "/js/main.75a7330f169a31271b4c.hot-update.js",
"/chunks/users.75a7330f169a31271b4c.hot-update.js": "/chunks/users.75a7330f169a31271b4c.hot-update.js",
"/chunks/dashboard~chunks/files~chunks/invoices~chunks/pages~chunks/plans~chunks/settings-payment-meth~0bfeabca.cec600408276af5260fe.hot-update.js": "/chunks/dashboard~chunks/files~chunks/invoices~chunks/pages~chunks/plans~chunks/settings-payment-meth~0bfeabca.cec600408276af5260fe.hot-update.js",
"/chunks/dashboard~chunks/files~chunks/invoices~chunks/pages~chunks/plans~chunks/settings-payment-meth~0bfeabca.dbdbf80723e41e072d01.hot-update.js": "/chunks/dashboard~chunks/files~chunks/invoices~chunks/pages~chunks/plans~chunks/settings-payment-meth~0bfeabca.dbdbf80723e41e072d01.hot-update.js",
"/chunks/users.2b4b9dbd972d7a9d7c83.hot-update.js": "/chunks/users.2b4b9dbd972d7a9d7c83.hot-update.js",
"/chunks/dashboard~chunks/files~chunks/invoices~chunks/pages~chunks/plans~chunks/settings-payment-meth~0bfeabca.d4f9806caf6c6d5f1344.hot-update.js": "/chunks/dashboard~chunks/files~chunks/invoices~chunks/pages~chunks/plans~chunks/settings-payment-meth~0bfeabca.d4f9806caf6c6d5f1344.hot-update.js"
}

View File

@@ -0,0 +1,288 @@
<template>
<div id="single-page">
<div id="page-content" class="small-width">
<MobileHeader :title="$router.currentRoute.meta.title" />
<PageHeader :can-back="true" :title="$router.currentRoute.meta.title" />
<div class="content-page">
<ValidationObserver @submit.prevent="createUser" ref="createUser" v-slot="{ invalid }" tag="form" class="form block-form">
<div class="form-group">
<FormLabel>{{ $t('admin_page_user.create_user.group_details') }}</FormLabel>
<!--Email-->
<div class="block-wrapper">
<label>{{ $t('page_registration.label_email') }}</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Email" rules="required" v-slot="{ errors }">
<input v-model="user.email" :placeholder="$t('admin_page_user.create_user.label_email')" type="email" class="focus-border-theme" :class="{'is-error': errors[0]}" />
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
</ValidationProvider>
</div>
<!--Name-->
<div class="block-wrapper">
<label>ICO:</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="ICO" rules="required" v-slot="{ errors }">
<input v-model="user.ico" placeholder="Type ICO" type="text" class="focus-border-theme" :class="{'is-error': errors[0]}" />
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
<small v-if="fullDetails" class="input-help">
{{ fullDetails }}
</small>
</ValidationProvider>
</div>
<!--Name-->
<div class="block-wrapper">
<label>Name:</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="User Name" rules="required" v-slot="{ errors }">
<input v-model="user.name" :placeholder="$t('admin_page_user.create_user.label_name')" type="text" class="focus-border-theme" :class="{'is-error': errors[0]}" />
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
</ValidationProvider>
</div>
<div class="block-wrapper">
<label>{{ $t('user_settings.address') }}:</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" rules="required" name="Address" v-slot="{ errors }">
<input v-model="user.address"
:placeholder="$t('user_settings.address_plac')"
type="text"
:class="{'is-error': errors[0]}"
/>
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
</ValidationProvider>
</div>
<div class="wrapper-inline">
<div class="block-wrapper">
<label>{{ $t('user_settings.city') }}:</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" rules="required" name="City" v-slot="{ errors }">
<input v-model="user.city"
:placeholder="$t('user_settings.city_plac')"
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('user_settings.postal_code') }}:</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" rules="required" name="Postal Code" v-slot="{ errors }">
<input v-model="user.postal_code"
:placeholder="$t('user_settings.postal_code_plac')"
type="text"
:class="{'is-error': errors[0]}"
/>
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
</ValidationProvider>
</div>
</div>
<div class="block-wrapper">
<label>{{ $t('user_settings.country') }}:</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" rules="required" name="Country" v-slot="{ errors }">
<SelectInput v-model="user.country"
:default="user.country"
:options="countries"
:placeholder="$t('user_settings.country_plac')"
:isError="errors[0]" />
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
</ValidationProvider>
</div>
<div class="block-wrapper">
<label>{{ $t('user_settings.state') }}:</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" rules="required" name="State" v-slot="{ errors }">
<input v-model="user.state"
:placeholder="$t('user_settings.state_plac')"
type="text"
:class="{'is-error': errors[0]}"
/>
<small class="input-help">
State, county, province, or region.
</small>
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
</ValidationProvider>
</div>
<div class="block-wrapper">
<label>{{ $t('user_settings.phone_number') }}:</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" rules="required" name="Phone Number" v-slot="{ errors }">
<input v-model="user.phone_number"
:placeholder="$t('user_settings.phone_number_plac')"
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>Plan:</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" rules="required" name="Plan" v-slot="{ errors }">
<SelectInput v-model="user.plan"
:default="user.country"
:options="plans"
placeholder="Vyberte plan"
:isError="errors[0]" />
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
</ValidationProvider>
</div>
</div>
<div class="form-group">
<ButtonBase :disabled="isLoading" :loading="isLoading" button-style="theme" type="submit">
{{ $t('admin_page_user.create_user.submit') }}
</ButtonBase>
</div>
</ValidationObserver>
</div>
</div>
</div>
</template>
<script>
import {ValidationProvider, ValidationObserver} from 'vee-validate/dist/vee-validate.full'
import SelectInput from '@/components/Others/Forms/SelectInput'
import ImageInput from '@/components/Others/Forms/ImageInput'
import FormLabel from '@/components/Others/Forms/FormLabel'
import MobileHeader from '@/components/Mobile/MobileHeader'
import SectionTitle from '@/components/Others/SectionTitle'
import ButtonBase from '@/components/FilesView/ButtonBase'
import PageHeader from '@/components/Others/PageHeader'
import {required} from 'vee-validate/dist/rules'
import {mapGetters} from 'vuex'
import {events} from "@/bus"
import axios from 'axios'
import {debounce} from "lodash";
export default {
name: 'CreateSubscriptionRequest',
components: {
ValidationProvider,
ValidationObserver,
SectionTitle,
MobileHeader,
SelectInput,
ButtonBase,
ImageInput,
PageHeader,
FormLabel,
required,
},
computed: {
...mapGetters([
'countries'
]),
},
watch: {
'user.ico': function (val) {
this.getCompanyDetails(val)
}
},
data() {
return {
isLoading: false,
plans: [],
user: {
ico: '',
name: '',
email: '',
address: '',
city: '',
postal_code: '',
country: 'CZ',
state: 'Česká Republika',
phone_number: '',
plan: '',
},
fullDetails: ''
}
},
methods: {
async createUser() {
// Validate fields
const isValid = await this.$refs.createUser.validate();
if (!isValid) return;
// Start loading
this.isLoading = true
axios
.post('/api/oasis/admin/users/create', this.user)
.then(response => {
// Show toaster
events.$emit('toaster', {
type: 'success',
message: this.$t('toaster.created_user'),
})
// Go to User page
this.$router.push({name: 'UserDetail', params: {id: response.data.data.id}})
})
.catch(error => {
// Validation errors
if (error.response.status == 422) {
if (error.response.data.errors['email']) {
this.$refs.createUser.setErrors({
'email': error.response.data.errors['email']
});
}
} else {
events.$emit('alert:open', {
title: this.$t('popup_error.title'),
message: this.$t('popup_error.message'),
})
}
})
.finally(() => {
this.isLoading = false
})
},
getCompanyDetails: debounce(function (value) {
axios.get('/api/oasis/admin/company-details?ico=' + value)
.then(response => {
this.user.name = response.data.name
this.user.address = response.data.addr_streetnr
this.user.city = response.data.city
this.user.postal_code = response.data.addr_zip
this.fullDetails = response.data.name + ' ' + response.data.addr_full
this.$refs.createUser.reset()
})
.catch(error => {
if (error.response.status == 404) {
this.$refs.createUser.setErrors({
'ICO': 'Nič sa nenašlo :('
});
}
})
}, 300),
},
created() {
axios.get('/api/admin/plans')
.then(response => {
response.data.data.forEach(plan => {
this.plans.push({
label: plan.data.attributes.name + ' - ' + plan.data.attributes.capacity_formatted,
value: plan.data.id,
})
})
})
}
}
</script>
<style lang="scss" scoped>
@import '@assets/vuefilemanager/_variables';
@import '@assets/vuefilemanager/_mixins';
@import '@assets/vuefilemanager/_forms';
</style>

View File

@@ -0,0 +1,216 @@
<template>
<div id="single-page">
<div id="page-content">
<MobileHeader :title="$router.currentRoute.meta.title"/>
<PageHeader :title="$router.currentRoute.meta.title"/>
<div class="content-page">
<!--Table tools-->
<div class="table-tools">
<div class="buttons">
<router-link :to="{name: 'CreateSubscriptionRequest'}">
<MobileActionButton icon="dollar-sign">
Vytvorit objednavku
</MobileActionButton>
</router-link>
<router-link :to="{name: 'UserCreate'}">
<MobileActionButton icon="user-plus">
Vytvorit Uzivatela
</MobileActionButton>
</router-link>
</div>
</div>
<!--Datatable-->
<DatatableWrapper @init="isLoading = false" api="/api/admin/users" :paginator="true" :columns="columns" class="table table-users">
<template slot-scope="{ row }">
<tr>
<td style="min-width: 320px">
<router-link :to="{name: 'UserDetail', params: {id: row.data.id}}">
<DatatableCellImage
:image="row.data.relationships.settings.data.attributes.avatar"
:title="row.data.relationships.settings.data.attributes.name"
:description="row.data.attributes.email"
/>
</router-link>
</td>
<td>
<ColorLabel :color="getRoleColor(row.data.attributes.role)">
{{ row.data.attributes.role }}
</ColorLabel>
</td>
<td v-if="config.isSaaS">
<span class="cell-item" v-if="row.data.attributes.subscription">
{{ $t('global.premium') }}
</span>
<span class="cell-item" v-else>
{{ $t('global.free') }}
</span>
</td>
<td>
<span class="cell-item">
{{ row.data.attributes.storage.used_formatted }}
</span>
</td>
<td v-if="config.storageLimit">
<span class="cell-item">
{{ row.data.attributes.storage.capacity_formatted }}
</span>
</td>
<td>
<span class="cell-item">
{{ row.data.attributes.created_at_formatted }}
</span>
</td>
<td>
<div class="action-icons">
<router-link :to="{name: 'UserDetail', params: {id: row.data.id}}">
<Edit2Icon size="15" class="icon icon-edit" />
</router-link>
<router-link :to="{name: 'UserDelete', params: {id: row.data.id}}">
<Trash2Icon size="15" class="icon icon-trash" />
</router-link>
</div>
</td>
</tr>
</template>
</DatatableWrapper>
</div>
</div>
<div id="loader" v-if="isLoading">
<Spinner></Spinner>
</div>
</div>
</template>
<script>
import DatatableCellImage from '@/components/Others/Tables/DatatableCellImage'
import DatatableWrapper from '@/components/Others/Tables/DatatableWrapper'
import MobileActionButton from '@/components/FilesView/MobileActionButton'
import MobileHeader from '@/components/Mobile/MobileHeader'
import SectionTitle from '@/components/Others/SectionTitle'
import ButtonBase from '@/components/FilesView/ButtonBase'
import {Trash2Icon, Edit2Icon} from "vue-feather-icons";
import PageHeader from '@/components/Others/PageHeader'
import ColorLabel from '@/components/Others/ColorLabel'
import Spinner from '@/components/FilesView/Spinner'
import {mapGetters} from "vuex"
import axios from 'axios'
export default {
name: 'Profile',
components: {
DatatableCellImage,
MobileActionButton,
DatatableWrapper,
SectionTitle,
MobileHeader,
Trash2Icon,
PageHeader,
ButtonBase,
ColorLabel,
Edit2Icon,
Spinner,
},
computed: {
...mapGetters(['config']),
},
data() {
return {
isLoading: true,
columns: undefined,
}
},
methods: {
getRoleColor(role) {
switch(role) {
case 'admin':
return 'purple'
break;
case 'user':
return 'yellow'
break;
}
}
},
created() {
this.columns = [
{
label: this.$t('admin_page_user.table.name'),
field: 'name',
sortable: true
},
{
label: this.$t('admin_page_user.table.role'),
field: 'role',
sortable: true
},
{
label: this.$t('admin_page_user.table.plan'),
field: 'subscription',
sortable: false,
hidden: ! this.config.isSaaS,
},
{
label: this.$t('admin_page_user.table.storage_used'),
field: 'used',
sortable: true
},
{
label: this.$t('admin_page_user.table.storage_capacity'),
field: 'settings.storage_capacity',
sortable: true,
hidden: ! this.config.storageLimit,
},
{
label: this.$t('admin_page_user.table.created_at'),
field: 'created_at',
sortable: true
},
{
label: this.$t('admin_page_user.table.action'),
field: 'data.action',
sortable: false
},
]
}
}
</script>
<style lang="scss" scoped>
@import '@assets/vuefilemanager/_variables';
@import '@assets/vuefilemanager/_mixins';
.table-tools {
background: white;
display: flex;
justify-content: space-between;
padding: 15px 0 10px;
position: sticky;
top: 40px;
z-index: 9;
}
.table {
.cell-item {
@include font-size(15);
white-space: nowrap;
}
}
@media only screen and (max-width: 690px) {
.table-tools {
padding: 0 0 5px;
}
}
@media (prefers-color-scheme: dark) {
.table-tools {
background: $dark_mode_background;
}
}
</style>

View File

@@ -11,6 +11,7 @@
<check-square-icon v-if="icon === 'check-square'" size="15" class="icon"></check-square-icon>
<x-square-icon v-if="icon === 'x-square'" size="15" class="icon"></x-square-icon>
<check-icon v-if="icon === 'check'" size="15" class="icon"></check-icon>
<dollar-sign-icon v-if="icon === 'dollar-sign'" size="15" class="icon"></dollar-sign-icon>
<sorting-and-preview-icon v-if="icon === 'preview-sorting'" size="15" class="icon preview-sorting"></sorting-and-preview-icon>
<span class="label">
<slot></slot>
@@ -20,7 +21,7 @@
</template>
<script>
import { CheckIcon, XSquareIcon, CheckSquareIcon, FolderPlusIcon, ListIcon, GridIcon, TrashIcon, UserPlusIcon, PlusIcon, CreditCardIcon } from 'vue-feather-icons'
import { DollarSignIcon, CheckIcon, XSquareIcon, CheckSquareIcon, FolderPlusIcon, ListIcon, GridIcon, TrashIcon, UserPlusIcon, PlusIcon, CreditCardIcon } from 'vue-feather-icons'
import SortingAndPreviewIcon from '@/components/FilesView/Icons/SortingAndPreviewIcon'
export default {
@@ -31,6 +32,7 @@
components: {
SortingAndPreviewIcon,
CheckSquareIcon,
DollarSignIcon,
CreditCardIcon,
FolderPlusIcon,
UserPlusIcon,

View File

@@ -8,6 +8,40 @@ import UserProfileMobileMenu from './views/Mobile/UserProfileMobileMenu'
Vue.use(Router)
const routesOasis = [
{
name: 'Admin',
path: '/admin',
component: () =>
import(/* webpackChunkName: "chunks/admin" */ './views/Admin'),
meta: {
requiresAuth: true,
title: 'Admin'
},
children: [
{
name: 'Users',
path: '/admin/users',
component: () =>
import(/* webpackChunkName: "chunks/users" */ './Oasis/Admin/Users'),
meta: {
requiresAuth: true,
title: i18n.t('routes_title.users_list')
},
},
{
name: 'CreateSubscriptionRequest',
path: '/admin/user/order',
component: () =>
import(/* webpackChunkName: "chunks/user-create" */ './Oasis/Admin/CreateSubscriptionRequest'),
meta: {
requiresAuth: true,
title: i18n.t('routes_title.user_create')
},
},
]
},
]
const routesAdmin = [
{
name: 'Admin',
@@ -658,6 +692,7 @@ const routesIndex = [
const router = new Router({
mode: 'history',
routes: [
...routesOasis,
...routesMaintenance,
...routesShared,
...routesAdmin,