pull/1/head
alireza hassani 5 years ago
commit 85453fd3d2

BIN
.rnd

Binary file not shown.

@ -2,6 +2,7 @@
namespace App\Providers; namespace App\Providers;
use Laravel\Passport\Passport;
use Illuminate\Support\Facades\Gate; use Illuminate\Support\Facades\Gate;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider; use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
@ -25,6 +26,6 @@ class AuthServiceProvider extends ServiceProvider
{ {
$this->registerPolicies(); $this->registerPolicies();
// Passport::routes();
} }
} }

@ -41,7 +41,7 @@ class SpUserTemplate extends Model{
public function business() public function business()
{ {
return $this->belongsTo('App\Business'); return $this->belongsTo('WM\\Core\\Models\\VirtualActivity');
} }
public function user_facilities() public function user_facilities()

@ -11,13 +11,13 @@
"php": "^7.1.3", "php": "^7.1.3",
"fideloper/proxy": "^4.0", "fideloper/proxy": "^4.0",
"laravel/framework": "5.8.*", "laravel/framework": "5.8.*",
"laravel/passport": "^7.3",
"laravel/tinker": "^1.0", "laravel/tinker": "^1.0",
"mll-lab/laravel-graphql-playground": "^1.1", "mll-lab/laravel-graphql-playground": "^1.1",
"nuwave/lighthouse": "dev-master", "nuwave/lighthouse": "dev-master",
"nwidart/laravel-modules": "^4.0", "nwidart/laravel-modules": "^4.0",
"wm/common": "dev-master", "wm/common": "dev-master",
"wm/crm": "dev-master", "wm/crm": "dev-master"
"wm/reservation": "dev-master"
}, },
"require-dev": { "require-dev": {
"beyondcode/laravel-dump-server": "^1.0", "beyondcode/laravel-dump-server": "^1.0",
@ -77,10 +77,6 @@
{ {
"type": "path", "type": "path",
"url": "./modules/wm-core" "url": "./modules/wm-core"
},
{
"type": "path",
"url": "./modules/wm-reservation"
} }
] ]
} }

942
composer.lock generated

File diff suppressed because it is too large Load Diff

@ -42,7 +42,7 @@ return [
], ],
'api' => [ 'api' => [
'driver' => 'token', 'driver' => 'passport',
'provider' => 'users', 'provider' => 'users',
], ],
], ],

@ -98,7 +98,7 @@ return [
'interfaces' => 'App\\GraphQL\\Interfaces', 'interfaces' => 'App\\GraphQL\\Interfaces',
'unions' => 'App\\GraphQL\\Unions', 'unions' => 'App\\GraphQL\\Unions',
'scalars' => 'App\\GraphQL\\Scalars', 'scalars' => 'App\\GraphQL\\Scalars',
'directives' => ['WM\\Core\\GraphQL\\Directives'], 'directives' => ['WM\\Core\\GraphQL\\Directives', 'WM\\CRM\\GraphQL\\Directives'],
], ],
/* /*
@ -129,7 +129,7 @@ return [
| |
*/ */
'paginate_max_count' => null, 'paginate_max_count' => 48,
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------

@ -0,0 +1,34 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class TempBussinessAddIsVirtualColumn extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('businesses', function (Blueprint $table) {
$table->enum('is_virtual', ['yes', 'no'])->default('yes');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
if (Schema::hasColumn('businesses', 'is_virtual')) {
Schema::table('businesses', function (Blueprint $table) {
$table->dropColumn('is_virtual');
});
}
}
}

@ -4,31 +4,15 @@ scalar DateTime @scalar(class: "Nuwave\\Lighthouse\\Schema\\Types\\Scalars\\Date
"A date string with format `Y-m-d`, e.g. `2011-05-23`." "A date string with format `Y-m-d`, e.g. `2011-05-23`."
scalar Date @scalar(class: "Nuwave\\Lighthouse\\Schema\\Types\\Scalars\\Date") scalar Date @scalar(class: "Nuwave\\Lighthouse\\Schema\\Types\\Scalars\\Date")
type Mutation
type Query {
users: [User!]! @paginate(type: "paginator" model: "App\\User" defaultCount: 15)
user(id: ID @eq): User @find(model: "App\\User")
}
type User {
id: ID!
name: String!
email: String!
created_at: DateTime!
updated_at: DateTime!
cell_number: String
}
input CreateUserRelationInput {
connect: ID!
}
input DateRange { input DateRange {
from: Date! from: Date!
to: Date! to: Date!
} }
type Mutation
type Query
#import ../modules/wm-crm/graphql/CRM.graphql #import ../modules/wm-crm/graphql/CRM.graphql
#import ../modules/wm-core/graphql/Core.graphql #import ../modules/wm-core/graphql/Core.graphql
#import ../modules/wm-common/graphql/Common.graphql #import ../modules/wm-common/graphql/Common.graphql

4212
package-lock.json generated

File diff suppressed because it is too large Load Diff

@ -15,7 +15,7 @@
"@ckeditor/ckeditor5-vue": "^1.0.0-beta.2", "@ckeditor/ckeditor5-vue": "^1.0.0-beta.2",
"@fortawesome/fontawesome-free": "^5.5.0", "@fortawesome/fontawesome-free": "^5.5.0",
"ajv": "^6.10.0", "ajv": "^6.10.0",
"apexcharts": "^3.8.2", "apexcharts": "^3.8.3",
"apollo-boost": "^0.4.3", "apollo-boost": "^0.4.3",
"apollo-cache-inmemory": "^1.6.2", "apollo-cache-inmemory": "^1.6.2",
"axios": "^0.18.0", "axios": "^0.18.0",
@ -26,9 +26,13 @@
"chart.js": "^2.7.3", "chart.js": "^2.7.3",
"graphql": "^14.4.2", "graphql": "^14.4.2",
"graphql-tag": "^2.10.1", "graphql-tag": "^2.10.1",
"jalali-moment": "^3.3.3",
"loadash": "^1.0.0",
"vue-apexcharts": "^1.4.0", "vue-apexcharts": "^1.4.0",
"vue-apollo": "^3.0.0-alpha.3", "vue-apollo": "^3.0.0-alpha.3",
"vue-chartjs": "^3.4.0", "vue-chartjs": "^3.4.0",
"vue-jalali-moment": "^1.0.0",
"vue-moment": "^4.0.0",
"vue-router": "^3.0.2", "vue-router": "^3.0.2",
"vue-scroll-reveal": "^1.0.11", "vue-scroll-reveal": "^1.0.11",
"vue-tinymce-editor": "^1.6.2", "vue-tinymce-editor": "^1.6.2",

@ -1,7 +1,14 @@
{ {
<<<<<<< HEAD
"/js/vue/Authentication/app.js": "/js/vue/Authentication/app.js?id=46082928a20a61ffac98", "/js/vue/Authentication/app.js": "/js/vue/Authentication/app.js?id=46082928a20a61ffac98",
"/js/vue/Home/app.js": "/js/vue/Home/app.js?id=2e3732fbd7feea17db64", "/js/vue/Home/app.js": "/js/vue/Home/app.js?id=2e3732fbd7feea17db64",
"/js/vue/Modules/CRM/app.js": "/js/vue/Modules/CRM/app.js?id=148b27c08322ebf935a0", "/js/vue/Modules/CRM/app.js": "/js/vue/Modules/CRM/app.js?id=148b27c08322ebf935a0",
"/js/vue/Modules/Reservation/app.js": "/js/vue/Modules/Reservation/app.js?id=9ef7b1af8b4a64d9d2cb", "/js/vue/Modules/Reservation/app.js": "/js/vue/Modules/Reservation/app.js?id=9ef7b1af8b4a64d9d2cb",
"/js/vue/User/app.js": "/js/vue/User/app.js?id=ad10046a6197a537f107" "/js/vue/User/app.js": "/js/vue/User/app.js?id=ad10046a6197a537f107"
=======
"/js/vue/Authentication/app.js": "/js/vue/Authentication/app.js?id=6b97e64b88b473b78429",
"/js/vue/Home/app.js": "/js/vue/Home/app.js?id=5cf42ee9bf28ccc49b35",
"/js/vue/Modules/CRM/app.js": "/js/vue/Modules/CRM/app.js?id=7ff9b1d2a8dddd5e3d03",
"/js/vue/User/app.js": "/js/vue/User/app.js?id=e0ac9d2216e187241d2a"
>>>>>>> refs/remotes/origin/master
} }

@ -1,231 +0,0 @@
<template>
<v-app>
<div id="app">
<!-- <Loader></Loader> -->
<!-- <Header></Header> -->
<background></background>
<v-container mt-5 p-5 fluid class="Login">
<h2 class="Title"> WILLA ENGINE </h2>
<transition name="Fade" mode="out-in" >
<v-layout v-if="State === 'Login'" key="Login" column justify-center fill-height class="LoginContainer" ref="LoginContainer" >
<v-flex xs12>
<WM-PartTitle class="WM-Margin-T-20" TitleFa=" ورود " TitleEn=" Login " TextFaColor="white--text" TextColor="black--text" color="white"></WM-PartTitle>
<v-flex mt-3>
<v-text-field dark label=" شماره ی همراه خود را وارد کنید " hint="حداکثر 50 کاراکتر " color="white" prepend-icon="fas fa-phone"></v-text-field>
</v-flex>
<v-flex>
<v-text-field dark type="password" label=" کلمه ی عبور " color="white" prepend-icon="fas fa-asterisk"></v-text-field>
</v-flex>
<v-flex>
<v-btn outline fab color="white" @click="State = 'Register'">
<v-icon>fas fa-plus</v-icon>
</v-btn>
<a href="/Main/Home">
<v-btn outline fab color="white" >
<v-icon>fas fa-chevron-left</v-icon>
</v-btn>
</a>
</v-flex>
</v-flex>
</v-layout>
<v-layout v-if="State === 'Register'" key="Register" column justify-center fill-height class="RegisterContainer" ref="RegisterContainer" >
<WM-PartTitle class="WM-Margin-T-20" TitleFa=" ثبت نام " TitleEn=" Sign Up " TextFaColor="white--text" TextColor="black--text" color="white"></WM-PartTitle>
<v-flex mt-3>
<v-text-field dark label=" نام و نام خانوادگی " hint="حداکثر 50 کاراکتر " color="white" prepend-icon="fas fa-user"></v-text-field>
</v-flex>
<v-flex>
<v-text-field dark label=" شماره ی همراه خود را وارد کنید " hint="حداکثر 50 کاراکتر " color="white" prepend-icon="fas fa-phone"></v-text-field>
</v-flex>
<v-flex>
<v-text-field dark type="password" label=" کلمه ی عبور " color="white" prepend-icon="fas fa-asterisk"></v-text-field>
</v-flex>
<v-flex>
<v-btn outline fab color="white" @click="State = 'Login'">
<v-icon>fas fa-plus</v-icon>
</v-btn>
<a href="/Main/Home">
<v-btn outline fab color="white" >
<v-icon>fas fa-chevron-left</v-icon>
</v-btn>
</a>
</v-flex>
</v-layout>
</transition>
</v-container>
</div>
</v-app>
</template>
<script>
import Background from '@JS/Authentication/components/Background';
import Tile from '@JS/Authentication/components/Tile';
import Loader from '@JS/Authentication/components/Loader';
import Header from '@JS/Authentication/components/Header';
export default {
data() {
return {
loading: true,
isShifted: false,
loadingVisible: false,
RegisterStatus: false,
LoginStatus: false,
State: 'Login'
};
},
components: {
Header: Header,
background: Background,
Tile: Tile,
Loader: Loader,
},
methods: {
Register: function() {
// console.log(this.$refs.RegisterContainer)
this.RegisterStatus = !this.RegisterStatus;
this.LoginStatus = !this.LoginStatus;
},
Log(value) {
this.$store.commit('Log',value);
}
},
beforeMount() {
var self = this;
setTimeout(function() {
self.loading = ! self.loading;
}, 2000)
}
};
</script>
<style lang="scss">
.Title {
letter-spacing: 15px;
font-size: 18px;
text-align: center;
color: #fff;
}
.Login {
// animation: FadeInUp 1s;
// transition: all 600ms cubic-bezier(.17,.67,1,.01);
}
.LoginContainer, .RegisterContainer {
margin-top: 150px !important;
width:600px;
margin:0 auto;
}
.Blur-enter-active, .Blur2-leave-active {
animation: BlurIn 0.5s;
animation-fill-mode: both;
}
.Blur-enter, .Blur2-leave-to /* .fade-leave-active below version 2.1.8 */ {
animation: BlurOut 0.5s;
animation-fill-mode: both;
}
.FadeUp-enter-active, .FadeUp-leave-active {
animation: FadeInUp 500ms;
}
.FadeUp-enter, .FadeUp-leave-to /* .fade-leave-active below version 2.1.8 */ {
animation: FadeOutUp 200ms;
}
.Fade-enter-active, .Fade-leave-active {
animation: FadeIn 500ms;
}
.Fade-enter, .Fade-leave-to /* .fade-leave-active below version 2.1.8 */ {
animation: FadeOut 500ms;
}
@keyframes FadeIn {
0% {
opacity: 0;
display:none;
}
100% {
opacity: 1;
}
}
@keyframes FadeOut {
0% {
opacity: 1;
}
100% {
display:none;
opacity: 0;
}
}
@keyframes FadeInUp {
0% {
display:none;
opacity: 0;
transform: translateY(300px);
}
100% {
opacity: 1;
transform: translateY(0px);
}
}
@keyframes FadeOutUp {
0% {
opacity: 1;
transform: translateY(0px);
}
100% {
opacity: 0;
transform: translateY(-300px);
display:none;
}
}
@keyframes BlurIn {
0% {
opacity: 0;
filter: blur(40px);
-webkit-filter: blur(40px);
transform: translateY(50px) scale(3);
-webkit-transform: translateY(50px) scale(3);
}
100% {
opacity: 1;
filter: blur(0px);
-webkit-filter: blur(0px);
transform: translateY(0px) scale(1);
-webkit-transform: translateY(0px) scale(1);
}
}
@keyframes BlurOut {
0% {
opacity: 1;
filter: blur(0px);
-webkit-filter: blur(0px);
transform: translateY(0px) scale(1);
-webkit-transform: translateY(0px) scale(1);
}
100% {
opacity: 0;
filter: blur(40px);
-webkit-filter: blur(40px);
transform: translateY(0px) scale(0.4);
-webkit-transform: translateY(0px) scale(0.4);
}
}
</style>

@ -1,85 +0,0 @@
import Vue from 'vue'
import App from './App.vue'
import router from './router.js'
import store from './store'
import VueScrollReveal from 'vue-scroll-reveal'
import Vuetify from 'vuetify'
import {
global
} from '@Global/mixins/global';
import 'popper.js'
import 'bootstrap-v4-rtl'
import 'bootstrap-v4-rtl/scss/bootstrap-rtl.scss'
import 'bootstrap-select'
import 'bootstrap-select/dist/css/bootstrap-select.css'
import 'vuetify/dist/vuetify.min.css' // Ensure you are using css-loader
import '@Global/assets/Font-Icons/css/fontello.css'
import "@Global/scss/style.scss";
// components
import PartTitle from "@Global/components/Dividers/PartTitle.vue";
import PageTitle from "@Global/components/Dividers/PageTitle.vue";
import Checkbox from "@Global/components/Inputs/Checkbox.vue";
import InfoBlock from "@Global/components/Misc/InfoBlock.vue";
import Breadcrumbs from '@Global/components/Misc/Breadcrumbs';
Vue.component('WM-PartTitle', PartTitle)
Vue.component('WM-PageTitle', PageTitle)
Vue.component('WM-Checkbox', Checkbox)
Vue.component('WM-InfoBlock', InfoBlock)
Vue.component('wm-breadcrumbs', Breadcrumbs)
/**
* First we will load all of this project's JavaScript dependencies which
* includes Vue and other libraries. It is a great starting point when
* building robust, powerful web applications using Vue and Laravel.
*/
window.Vue = require('vue');
/**
* The following block of code may be used to automatically register your
* Vue components. It will recursively scan this directory for the Vue
* components and automatically register them with their "basename".
*
* Eg. ./components/ExampleComponent.vue -> <example-component></example-component>
*/
// const files = require.context('./', true, /\.vue$/i)
// files.keys().map(key => Vue.component(key.split('/').pop().split('.')[0], files(key).default))
/**
* Next, we will create a fresh Vue application instance and attach it to
* the page. Then, you may begin adding components to this application
* or customize the JavaScript scaffolding to fit your unique needs.
*/
Vue.use(Vuetify, {
iconfont: 'fa',
rtl: true,
});
// Vue.config.productionTip = false;
Vue.use(VueScrollReveal, {
class: 'v-scroll-reveal', // A CSS class applied to elements with the v-scroll-reveal directive; useful for animation overrides.
duration: 800,
scale: 1,
distance: '10px',
mobile: false
});
Vue.mixin(global);
const app = new Vue({
router,
store,
render: h => h(App),
}).$mount('#app');

@ -1,117 +0,0 @@
<template>
<div>
<div class="backgrounds">
<canvas id="canvas__bg" width="32" height="32"></canvas>
<div class="overlay gradient"></div>
<div class="overlay vignette"></div>
</div>
</div>
</template>
<script>
export default {
methods: {
moveGradient: function() {
var c = document.getElementById("canvas__bg");
var $ = c.getContext("2d");
var col = function(x, y, r, g, b) {
$.fillStyle = "rgb(" + r + "," + g + "," + b + ")";
$.fillRect(x, y, 1, 1);
};
var R = function(x, y, t) {
return Math.floor(130 + 64 * Math.cos((x * x - y * y) / 300 + t));
};
var G = function(x, y, t) {
return Math.floor(
0 +
64 *
Math.sin(
(x * x * Math.cos(t / 4) + y * y * Math.sin(t / 3)) / 300
)
);
};
var B = function(x, y, t) {
return Math.floor(
250 +
64 *
Math.sin(
5 * Math.sin(t / 9) +
((x - 100) * (x - 100) + (y - 100) * (y - 100)) / 1100
)
);
};
var t = 0;
var run = function() {
for (let x = 0; x <= 35; x++) {
for (let y = 0; y <= 35; y++) {
col(x, y, R(x, y, t), G(x, y, t), B(x, y, t));
}
}
t = t + 0.03;
window.requestAnimationFrame(run);
};
(function() {
setTimeout(function() {
run(); // canvas background animation
}, 100);
})();
}
},
mounted() {
this.moveGradient();
}
};
</script>
<style lang="scss" scoped>
#canvas__bg,
.overlay {
width: 100%;
height: 100%;
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
}
.backgrounds {
position: fixed;
z-index: -1;
width: 100%;
height: 100%;
}
.overlay.gradient {
background: #17a2b8;
/* Old browsers */
// background: -moz-linear-gradient( -45deg, #310089 0%, #5b007c 100%);
/* FF3.6-15 */
// background: -webkit-linear-gradient( -45deg, #310089 0%, #5b007c 100%);
/* Chrome10-25,Safari5.1-6 */
background: linear-gradient(135deg, #000 0%, #ee3552 100%);
/* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */
// filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#17a2b8', endColorstr='#ee3552', GradientType=1);
/* IE6-9 fallback on horizontal gradient */
opacity: 0.59;
}
.overlay.vignette {
// background: -moz-radial-gradient( center, ellipse cover, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 1) 100%);
/* FF3.6-15 */
// background: -webkit-radial-gradient( center, ellipse cover, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 1) 100%);
/* Chrome10-25,Safari5.1-6 */
background: radial-gradient(ellipse at center, rgba(0, 0, 0, 0) 0%, #000000 100%);
/* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */
// filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#00000000', endColorstr='#000000', GradientType=1);
/* IE6-9 fallback on horizontal gradient */
opacity: 0.6;
transition: opacity 4s cubic-bezier(0.19, 1, 0.22, 1) 0.5s;
-webkit-transition: opacity 4s cubic-bezier(0.19, 1, 0.22, 1) 0.5s;
}
</style>

@ -1,29 +0,0 @@
<template>
<div class="Header">
<div class="Logo">
WILLA ENGINE
</div>
</div>
</template>
<script>
export default {
components: {
},
}
</script>
<style lang="scss" scoped>
.Header {
position: fixed;
width: 100%;
text-align: center;
}
.Logo {
letter-spacing: 15px;
color: #fff;
position: absolute;
top: 20px;
right: calc( 50% - 150px );
}
</style>

@ -1,118 +0,0 @@
<template>
<div class="LoaderContainer">
<div class="LoaderOverlay">
<div class="Loader"> WILLA ENGINE </div>
</div>
</div>
</template>
<script>
export default {
}
</script>
<style lang="scss" scoped>
.LoaderContainer {
position: fixed;
width: 100%;
height: 100%;
}
.LoaderOverlay {
position: relative;
width: 100%;
height: 100%;
background: inherit;
overflow: hidden;
}
.LoaderContainer:after {
content: '';
width: 100%;
height: 100%;
background: inherit;
position: absolute;
left: -25px;
right: 0;
top: -25px;
bottom: 0;
box-shadow: inset 0 0 0 200px rgba(255, 255, 255, 0.05);
filter: blur(20px);
}
.Loader {
color: #fff;
display:flex;
justify-content: center;
align-items: center;
height: 100%;
margin: auto;
background-color: transparent;
animation: load 2.2s infinite 0s ease-in-out;
animation-direction: alternate;
font-size: 40px;
}
.Loader div {
/* animation: BlurFade 4s linear infinite alternate; */
animation: load 2.2s infinite 0s ease-in-out;
animation-direction: alternate;
margin-right: 15px;
font-size: 40px;
}
@-webkit-keyframes BlurFade {
0% {
opacity: 0;
filter: blur(40px);
-webkit-filter: blur(40px);
transform: translateY(50px) rotateY(90deg) scale(3);
-webkit-transform: translateY(50px) rotateY(90deg) scale(3);
}
25% {
opacity: 1;
filter: blur(0px);
-webkit-filter: blur(0px);
transform: translateY(0px) rotateY(0deg) scale(1.2);
-webkit-transform: translateY(0px) rotateY(0deg) scale(1.2);
}
50% {
opacity: 1;
filter: blur(0px);
-webkit-filter: blur(0px);
transform: translateY(0px) rotateY(0deg) scale(1.2);
-webkit-transform: translateY(0px) scale(1.2);
}
75% {
opacity: 1;
filter: blur(0px);
-webkit-filter: blur(0px);
transform: translateY(0px) rotateY(0deg) scale(1.2);
-webkit-transform: translateY(0px) rotateY(0deg) scale(1.2);
}
100% {
opacity: 0;
filter: blur(40px);
-webkit-filter: blur(40px);
transform: translateY(50px) rotateY(90deg) scale(3);
-webkit-transform: translateY(50px) rotateY(90deg) scale(3);
}
}
@keyframes load {
0% {
opacity: 0.08;
font-size: 20px;
font-weight: 400;
filter: blur(5px);
letter-spacing: 15px;
}
100% {
opacity: 1;
font-size: 20px;
font-weight:600;
filter: blur(0);
letter-spacing: 5px;
}
}
</style>

@ -1,632 +0,0 @@
<template>
<div>
<div class="o-grid__item hover-target">
<button class="c-hamburger c-hamburger--htla" @click="makeActive">
<span>toggle menu</span>
</button>
</div>
<div id="menu" class="menu" :class="{active: isActive}">
<div class="section section_fixed" id="menu-inner">
<div class="section__clip">
<div class="section__content grad-darkpurple">
<div class="description">
<!-- <h1>The future of Management Platform is here.</h1> -->
<p>
<span>
Vold is an advanced, modular-based Management System, custom-tailored to fit your needs.
<br>
<br>&copy;
</span>
<span id="copyRightYear2"></span>
<a href="index.html" class="hover-target" title="Advanced Management Platform for Modern Businesses">Vold</a>
<span>. All rights reserved.</span>
<a href="mailto:app@vold.io" class="hover-target">Contact Us</a>
<span> Website by</span>
<a href="http://fleava.com/" target="_blank" title="Fleava Bali Digital Advertising Agency" class="hover-target">Fleava</a>
</p>
</div>
<div class="nav-container">
<div></div>
<div>
<a href="#cms" class="scroll-nav nav-menu">
<div class="bg grad-red"></div>
<span>01</span>
<h3>
Vold
<br>CMS
</h3>
</a>
</div>
<div>
<a href="#file" class="scroll-nav nav-menu">
<div class="bg grad-purple"></div>
<span>02</span>
<h3>
File
<br>Manager
</h3>
</a>
</div>
<div>
<a href="#oana" class="scroll-nav nav-menu">
<div class="bg grad-pink"></div>
<span>03</span>
<h3>
Artificial
<br>Intelligence
</h3>
</a>
</div>
<div>
<a href="#data" class="scroll-nav nav-menu">
<div class="bg grad-darkblue"></div>
<span>04</span>
<h3>
Data
<br>Visualizer
</h3>
</a>
</div>
<div>
<a href="#insight" class="scroll-nav nav-menu">
<div class="bg grad-midblue"></div>
<span>05</span>
<h3>
Audience
<br>Insight
</h3>
</a>
</div>
<div>
<a href="#globe" class="scroll-nav nav-menu">
<div class="bg grad-purple"></div>
<span>06</span>
<h3>
Globe
<br>Visualizer
</h3>
</a>
</div>
<div>
<a href="#custom" class="scroll-nav nav-menu">
<div class="bg grad-red"></div>
<span>07</span>
<h3>
Customize
<br>Vold
</h3>
</a>
</div>
<div>
<a href="#contact" class="scroll-nav nav-menu">
<div class="bg grad-purple"></div>
<span>08</span>
<h3>
Contact
<br>Vold
</h3>
</a>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
export default {
data() {
return {
isActive: false,
}
},
methods: {
makeActive: function() {
this.isActive = !this.isActive;
}
}
};
</script>
<style lang="scss" scoped>
/* ---------- MENU ---------- */
.o-grid__item {
position: fixed;
left: 40px;
z-index: 3;
top: 50%;
margin-top: -50px;
z-index: 100;
}
.c-hamburger {
display: block;
position: relative;
overflow: hidden;
margin: 0;
padding: 0;
width: 65px;
height: 96px;
font-size: 0;
text-indent: -9999px;
cursor: pointer;
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
box-shadow: none;
border-radius: none;
border: none;
-webkit-transition: background 0.3s;
transition: background 0.3s;
}
.c-hamburger:focus {
outline: none;
}
.c-hamburger span {
display: block;
position: absolute;
top: 44px;
left: 5px;
right: 18px;
height: 1px;
background: white;
}
.c-hamburger span::before,
.c-hamburger span::after {
position: absolute;
display: block;
left: 0;
width: 100%;
height: 1px;
background-color: #fff;
content: "";
}
.c-hamburger span::before {
top: -9px;
}
.c-hamburger span::after {
bottom: -9px;
width: 50%;
}
.c-hamburger--htla {
background: none;
}
.c-hamburger--htla span {
-webkit-transition: -webkit-transform 0.3s;
transition: transform 0.3s;
}
.c-hamburger--htla span::before {
-webkit-transform-origin: top right;
-ms-transform-origin: top right;
transform-origin: top right;
-webkit-transition: -webkit-transform 0.3s, width 0.3s, top 0.3s;
transition: transform 0.3s, width 0.3s, top 0.3s;
}
.c-hamburger--htla span::after {
-webkit-transform-origin: bottom right;
-ms-transform-origin: bottom right;
transform-origin: bottom right;
-webkit-transition: -webkit-transform 0.3s, width 0.3s, bottom 0.3s;
transition: transform 0.3s, width 0.3s, bottom 0.3s;
}
.c-hamburger {
opacity: 0;
transition: all 2.8s cubic-bezier(.19, 1, .22, .95) .1s;
-webkit-transition: all 2.8s cubic-bezier(.19, 1, .22, .95) .1s;
-webkit-transform: translateX(-50px) skewX(-60deg);
-ms-transform: translateX(-50px) skewX(-60deg);
transform: translateX(-50px) skewX(-60deg);
}
/* active state, i.e. menu open */
.c-hamburger--htla.is-active {}
.c-hamburger--htla.is-active span {
-webkit-transform: rotate(180deg);
-ms-transform: rotate(180deg);
transform: rotate(180deg);
}
.c-hamburger--htla.is-active span::before,
.c-hamburger--htla.is-active span::after {
width: 50%;
}
.c-hamburger--htla.is-active span::before {
top: 0;
-webkit-transform: translateX(23px) translateY(1px) rotate(45deg);
-ms-transform: translateX(23px) translateY(1px) rotate(45deg);
transform: translateX(23px) translateY(1px) rotate(45deg);
}
.c-hamburger--htla.is-active span::after {
bottom: -1px;
-webkit-transform: translateX(23px) translateY(-1px) rotate(-45deg);
-ms-transform: translateX(23px) translateY(-1px) rotate(-45deg);
transform: translateX(23px) translateY(-1px) rotate(-45deg);
}
.menu {
position: fixed;
z-index: 99;
width: 100%;
height: 100%;
width: 100vw;
height: 100vh;
top: 0;
left: 0;
pointer-events: none;
opacity: 1;
}
.menu .section__content .overlay {
z-index: -1;
background-color: rgba(10, 20, 30, .7)
}
.menu-overlay {
position: absolute;
width: 100%;
height: 100%;
width: 100vw;
height: 100vh;
top: 0;
left: 0;
background-color: rgba(0, 0, 0, .6);
opacity: 0;
-webkit-transition: all .8s cubic-bezier(0.19, 1, 0.22, 1);
transition: all .8s cubic-bezier(0.19, 1, 0.22, 1);
}
.menu.active {
pointer-events: auto;
}
.menu.active .menu-overlay {
opacity: 1;
}
.menu .section__clip {
width: 0;
-webkit-transition: all .8s cubic-bezier(0.19, 1, 0.22, 1);
transition: all .8s cubic-bezier(0.19, 1, 0.22, 1);
}
.menu.active .section__clip {
width: 100%;
width: 100vw;
}
.menu .description,
.menu .description h1,
.menu .description p {
transition: all 1.8s cubic-bezier(.19, 1, .22, .95);
-webkit-transition: all 1.8s cubic-bezier(.19, 1, .22, .95);
}
.menu .description {
width: 50%;
max-width: 280px;
margin: 0 auto;
position: absolute;
bottom: 10%;
right: 10%;
opacity: 0;
z-index: 2;
overflow: hidden;
display: flex;
flex-direction: row;
}
.menu.active .description {
opacity: 1;
}
.menu .description p {
width: 100%;
font-size: 8px;
text-transform: uppercase;
letter-spacing: 2px;
color: rgba(255, 255, 255, .3);
padding-left: 30px;
}
.menu .description p span {
pointer-events: none;
}
.menu .description p a {
color: rgba(255, 255, 255, .5);
}
.menu .description p a:hover {
color: rgba(255, 255, 255, .8);
}
.menu .description h1,
.menu .description p {
opacity: 0;
-webkit-transform: translateX(-100px);
-ms-transform: translateX(-100px);
transform: translateX(-100px);
}
.menu .description h1 {
-webkit-transition-delay: 0.1s;
transition-delay: 0.1s
}
.menu .description p:nth-child(1) {
-webkit-transition-delay: 0.2s;
transition-delay: 0.2s
}
.menu .description p:nth-child(2) {
-webkit-transition-delay: 0.3s;
transition-delay: 0.3s
}
.menu.active .description h1,
.menu.active .description p {
opacity: 1;
-webkit-transform: translateX(0);
-ms-transform: translateX(0);
transform: translateX(0);
}
.nav-container {
display: flex;
flex-direction: row;
width: 100%;
height: 100%;
}
.nav-container>div {
border-left: 1px solid rgba(255, 255, 255, .05);
width: 100%;
height: 100%;
overflow: hidden;
position: relative;
}
.nav-container>div:nth-child(1) {
border-left: none;
}
.nav-container a {
position: relative;
width: 100%;
height: 100%;
top: 0;
left: 0;
overflow: hidden;
display: flex;
justify-content: center;
flex-direction: column;
-webkit-transform: translateX(-100%);
-ms-transform: translateX(-100%);
transform: translateX(-100%);
}
.nav-container a,
.nav-container a span,
.nav-container a h3,
.nav-container a .bg {
opacity: 0;
transition: all 1s cubic-bezier(.19, 1, .22, .95);
-webkit-transition: all 1s cubic-bezier(.19, 1, .22, .95);
}
.nav-container a span,
.nav-container a h3 {
margin-left: 10px;
}
.menu.active .nav-container a,
.menu.active .nav-container a span,
.menu.active .nav-container a h3 {
opacity: 1;
}
.menu.active .nav-container a {
-webkit-transform: translateX(0);
-ms-transform: translateX(0);
transform: translateX(0);
}
.menu.active .nav-container div:nth-child(2) a {
-webkit-transition-delay: 0.1s;
transition-delay: 0.1s
}
.menu.active .nav-container div:nth-child(3) a {
-webkit-transition-delay: 0.14s;
transition-delay: 0.14s
}
.menu.active .nav-container div:nth-child(4) a {
-webkit-transition-delay: 0.18s;
transition-delay: 0.18s
}
.menu.active .nav-container div:nth-child(5) a {
-webkit-transition-delay: 0.22s;
transition-delay: 0.22s
}
.menu.active .nav-container div:nth-child(6) a {
-webkit-transition-delay: 0.26s;
transition-delay: 0.26s
}
.menu.active .nav-container div:nth-child(7) a {
-webkit-transition-delay: 0.3s;
transition-delay: 0.3s
}
.menu.active .nav-container div:nth-child(8) a {
-webkit-transition-delay: 0.34s;
transition-delay: 0.34s
}
.menu.active .nav-container div:nth-child(9) a {
-webkit-transition-delay: 0.38s;
transition-delay: 0.38s
}
.nav-container a .bg {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: -1;
opacity: 0;
}
.nav-container a span {
display: block;
font: 700 80px/1 "Proxima Nova", Arial, Helvetica, sans-serif;
color: rgba(255, 255, 255, .1);
-webkit-transform: translateX(-30px);
-ms-transform: translateX(-30px);
transform: translateX(-30px);
}
@media screen and (max-width: 890px) {
.nav-container a span {
font-size: 60px;
}
}
.nav-container h3 {
font: 400 10px "Proxima Nova", Arial, Helvetica, sans-serif;
text-transform: uppercase;
color: rgba(255, 255, 255, .5);
letter-spacing: 2px;
margin-top: 0;
-webkit-transform: translateX(10px);
-ms-transform: translateX(10px);
transform: translateX(10px);
}
.nav-container a:hover .bg {
opacity: 1;
}
.nav-container a:hover span {
color: rgba(255, 255, 255, .2);
-webkit-transform: translateX(-20px);
-ms-transform: translateX(-20px);
transform: translateX(-20px);
}
.nav-container a:hover h3 {
color: rgba(255, 255, 255, 1);
-webkit-transform: translateX(0px);
-ms-transform: translateX(0px);
transform: translateX(0px);
}
.grad-darkpurple {
background: rgb(0,50,66); /* Old browsers */
background: -moz-linear-gradient(45deg, rgba(0,50,66,1) 0%, rgba(32,0,96,1) 50%, rgba(79,0,92,1) 100%); /* FF3.6-15 */
background: -webkit-linear-gradient(45deg, rgba(0,50,66,1) 0%,rgba(32,0,96,1) 50%,rgba(79,0,92,1) 100%); /* Chrome10-25,Safari5.1-6 */
background: linear-gradient(45deg, rgba(0,50,66,1) 0%,rgba(32,0,96,1) 50%,rgba(79,0,92,1) 100%); /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#003242', endColorstr='#4f005c',GradientType=1 ); /* IE6-9 fallback on horizontal gradient */
}
.grad-blue, .section .section__content h2::before {
background: rgb(130,0,244); /* Old browsers */
background: -moz-linear-gradient(45deg, rgba(130,0,244,1) 0%, rgba(37,247,255,1) 100%); /* FF3.6-15 */
background: -webkit-linear-gradient(45deg, rgba(130,0,244,1) 0%,rgba(37,247,255,1) 100%); /* Chrome10-25,Safari5.1-6 */
background: linear-gradient(45deg, rgba(130,0,244,1) 0%,rgba(37,247,255,1) 100%); /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#8200f4', endColorstr='#25f7ff',GradientType=1 ); /* IE6-9 fallback on horizontal gradient */
}
.grad-midblue {
background: #350096; /* Old browsers */
background: -moz-linear-gradient(45deg, #350096 0%, #00e3c6 100%); /* FF3.6-15 */
background: -webkit-linear-gradient(45deg, #350096 0%,#00e3c6 100%); /* Chrome10-25,Safari5.1-6 */
background: linear-gradient(45deg, #350096 0%,#00e3c6 100%); /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#350096', endColorstr='#00e3c6',GradientType=1 ); /* IE6-9 fallback on horizontal gradient */
}
.grad-darkblue {
background: #23075d; /* Old browsers */
background: -moz-linear-gradient(45deg, #23075d 0%, #00605c 100%); /* FF3.6-15 */
background: -webkit-linear-gradient(45deg, #23075d 0%,#00605c 100%); /* Chrome10-25,Safari5.1-6 */
background: linear-gradient(45deg, #23075d 0%,#00605c 100%); /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#23075d', endColorstr='#00605c',GradientType=1 ); /* IE6-9 fallback on horizontal gradient */
}
.grad-purple {
background: rgb(42,10,169); /* Old browsers */
background: -moz-linear-gradient(45deg, rgba(42,10,169,1) 0%, rgba(124,19,157,1) 100%); /* FF3.6-15 */
background: -webkit-linear-gradient(45deg, rgba(42,10,169,1) 0%,rgba(124,19,157,1) 100%); /* Chrome10-25,Safari5.1-6 */
background: linear-gradient(45deg, rgba(42,10,169,1) 0%,rgba(124,19,157,1) 100%); /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#2a0aa9', endColorstr='#7c139d',GradientType=1 ); /* IE6-9 fallback on horizontal gradient */
}
.grad-pink, .section .section__content.grad-darkblue h2::before {
background: #fa49ff; /* Old browsers */
background: -moz-linear-gradient(45deg, #fa49ff 0%, #6267fc 64%, #5bead5 100%); /* FF3.6-15 */
background: -webkit-linear-gradient(45deg, #fa49ff 0%,#6267fc 64%,#5bead5 100%); /* Chrome10-25,Safari5.1-6 */
background: linear-gradient(45deg, #fa49ff 0%,#6267fc 64%,#5bead5 100%); /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#fa49ff', endColorstr='#5bead5',GradientType=1 ); /* IE6-9 fallback on horizontal gradient */
}
.grad-red, .section .section__content.grad-midblue h2::before{
background: #221884; /* Old browsers */
background: -moz-linear-gradient(45deg, #221884 0%, #be3679 50%, #ffa458 100%); /* FF3.6-15 */
background: -webkit-linear-gradient(45deg, #221884 0%,#be3679 50%,#ffa458 100%); /* Chrome10-25,Safari5.1-6 */
background: linear-gradient(45deg, #221884 0%,#be3679 50%,#ffa458 100%); /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#221884', endColorstr='#ffa458',GradientType=1 ); /* IE6-9 fallback on horizontal gradient */
}
.section {
position: relative;
height: 100%;
}
.section__clip {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
clip: rect(auto, auto, auto, auto);
-webkit-clip-path: polygon(100% 0, 100% 100%, 0 100%, 0 0);
clip-path: polygon(100% 0, 100% 100%, 0 100%, 0 0);
}
.section__content {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
margin: auto;
}
</style>

@ -1,81 +0,0 @@
<template>
<v-layout wrap>
<v-container>
<v-icon class="Menu" @click.stop="drawer = !drawer" dark>fas fa-bars</v-icon>
</v-container>
<v-navigation-drawer v-model="drawer" app temporary right>
<v-list class="pa-1">
<v-list-tile avatar>
<v-list-tile-avatar>
<img src="https://randomuser.me/api/portraits/men/85.jpg">
</v-list-tile-avatar>
<v-list-tile-content>
<v-list-tile-title>John Leider</v-list-tile-title>
</v-list-tile-content>
</v-list-tile>
</v-list>
<v-list class="pt-0" dense>
<v-divider></v-divider>
<v-list-tile v-for="item in items" :key="item.title">
<v-list-tile-action>
<v-icon>{{ item.icon }}</v-icon>
</v-list-tile-action>
<v-list-tile-content>
<v-list-tile-title>{{ item.title }}</v-list-tile-title>
</v-list-tile-content>
</v-list-tile>
</v-list>
</v-navigation-drawer>
</v-layout>
</template>
<script>
export default {
data() {
return {
drawer: false,
items: [
{ title: 'Home', icon: 'dashboard' },
{ title: 'About', icon: 'question_answer' }
]
}
}
}
</script>
<style lang="scss" scoped>
.Menu {
position: absolute;
right: 20px;
top: 20px;
}
.drawer-trigger {
position: fixed;
top: 0px;
padding: 40px;
background-color: white;
left: 400px;
}
.drawer-trigger.active {
color: red;
}
.drawer {
position: fixed;
top: 0px;
left: -400px;
bottom: 0px;
background-color: white;
width: 400px;
}
.drawer.open {
left: 0px;
}
</style>

@ -1,38 +0,0 @@
<template>
<div class="blurred-box">
Salam
</div>
</template>
<script>
export default {
}
</script>
<style lang="scss" scoped>
.blurred-box {
position: relative;
width: 250px;
height: 350px;
top: calc(50% - 175px);
left: calc(50% - 125px);
background: inherit;
border-radius: 2px;
overflow: hidden;
}
.blurred-box:after {
content: '';
width: 300px;
height: 300px;
background: inherit;
position: absolute;
left: -25px;
right: 0;
top: -25px;
bottom: 0;
box-shadow: inset 0 0 0 200px rgba(255, 255, 255, 0.05);
filter: blur(10px);
}
</style>

@ -1,34 +0,0 @@
import Vue from 'vue'
import Router from 'vue-router'
Vue.use(Router)
const router = new Router({
mode: 'history',
base: process.env.BASE_URL,
linkActiveClass: "WM-Active",
linkExactActiveClass: "WM-Exact-Active",
routes: [
// {
// path: '*',
// redirect: '/Login'
// },
]
})
router.beforeResolve((to, from, next) => {
if (to.name && router.app.$children[0] != undefined)
router.app.$children[0].loadingVisible = true;
setTimeout(() => {
next();
}, 500)
})
router.afterEach(() => {
if (router.app.$children[0] != undefined)
router.app.$children[0].loadingVisible = false;
})
export default router;

@ -1,20 +0,0 @@
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
export default new Vuex.Store({
state: {
UserDetails: false,
UserRoles: false,
OrderDetails: false,
OrderStatus: false,
SendEmail: false,
SendSMS: false
},
mutations: {
Log(state, ToLog) {
console.log(ToLog);
}
}
})

@ -22,9 +22,9 @@
<v-list-tile-content> <v-list-tile-content>
<v-list-tile-title class="Name"> علیرضا حسنی </v-list-tile-title> <v-list-tile-title class="Name"> علیرضا حسنی </v-list-tile-title>
<div class="Role"> مدیریت </div> <div class="Role"> مدیریت </div>
<a href="/Login" class="LogOut"> <a class="LogOut">
<v-tooltip bottom color="black"> <v-tooltip bottom color="black">
<v-btn small @click.native="$store.state.SendSMS = true" slot="activator" outline fab color="black" dark><v-icon dark>fas fa-power-off</v-icon></v-btn> <v-btn small @click.native.stop="logout" slot="activator" outline fab color="black" dark><v-icon dark>fas fa-power-off</v-icon></v-btn>
<span> خروج از حساب کاربری </span> <span> خروج از حساب کاربری </span>
</v-tooltip> </v-tooltip>
</a> </a>
@ -48,7 +48,7 @@
<script> <script>
import Tile from '@Global/components/Drawer/Tile'; import Tile from '@Global/components/Drawer/Tile';
import Notifications from '@Global/components/Drawer/Notifications'; import Notifications from '@Global/components/Drawer/Notifications';
import {mapActions} from 'vuex';
export default { export default {
data() { data() {
@ -69,6 +69,9 @@
'wm-list-tile': Tile, 'wm-list-tile': Tile,
'wm-notifications':Notifications, 'wm-notifications':Notifications,
}, },
methods:{
...mapActions('auth', ['logout'])
}
} }
</script> </script>

@ -0,0 +1,26 @@
import axios from 'axios'
import { TokenService } from './storage.services'
const ApiService = {
init(baseURL) {
axios.defaults.baseURL = baseURL;
},
setHeader() {
axios.defaults.headers.common["Accept"] = `application/json`;
axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
},
setAuthHeader() {
axios.defaults.headers.common["Authorization"] = `Bearer ${TokenService.getToken()}`;
},
removeAuthHeader() {
axios.defaults.headers.common["Authorization"] = null;
},
}
export default ApiService
export { ApiService }

@ -0,0 +1,42 @@
import qs from 'qs';
const TOKEN_KEY = 'access_token'
const USER = 'user'
/**
* Manage the how Access Tokens are being stored and retreived from storage.
*
* Current implementation stores to localStorage. Local Storage should always be
* accessed through this instace.
**/
const TokenService = {
getToken() {
return localStorage.getItem(TOKEN_KEY)
},
saveToken(accessToken = null) {
console.log(accessToken);
localStorage.setItem(TOKEN_KEY, accessToken)
},
removeToken() {
localStorage.removeItem(TOKEN_KEY)
},
}
const UserService = {
getUser() {
return qs.parse(localStorage.getItem(USER))
},
saveUser(user = null) {
user = qs.stringify(user);
localStorage.setItem(USER, user)
},
removeUser() {
localStorage.removeItem(USER)
},
}
export { TokenService, UserService }

@ -1,27 +1,25 @@
const urlGenerator = (url, parameters = {}) => { const urlGenerator = (urls) => {
let urlPath = url.split("/"); return function(routeAddress, parameters) {
let newPath = []; let urlPath = urls[routeAddress].split("/");
for (const iterator of urlPath) { let newPath = [];
if (iterator.startsWith(":")) { for (const iterator of urlPath) {
if (iterator.endsWith("?")) { if (iterator.startsWith(":")) {
if (parameters.hasOwnProperty(iterator.slice(1, -1))) { if (iterator.endsWith("?")) {
newPath.push(parameters[iterator.slice(1, -1)]); if (parameters.hasOwnProperty(iterator.slice(1, -1))) {
newPath.push(parameters[iterator.slice(1, -1)]);
}
} else {
console.assert(parameters.hasOwnProperty(iterator.slice(1)), 'parameter "' + iterator.slice(1) + '" not specified in parameters.')
newPath.push(parameters[iterator.slice(1)]);
} }
} else { } else {
console.assert( newPath.push(iterator);
parameters.hasOwnProperty(iterator.slice(1)),
'parameter "' +
iterator.slice(1) +
'" not specified in parameters.'
);
newPath.push(parameters[iterator.slice(1)]);
} }
} else {
newPath.push(iterator);
} }
return '/' + newPath.join("/");
} }
return ("/" + newPath.join("/")).replace("//", "/");
}; };
export { urlGenerator }; export {
urlGenerator
}

@ -70,6 +70,12 @@ Vue.use(VueScrollReveal, {
}); });
Vue.mixin(global); Vue.mixin(global);
import { TokenService } from "@Global/services/storage.services";
import ApiService from "@Global/services/api.services";
// If token exists set Authorizion header
if (TokenService.getToken()) {
ApiService.setAuthHeader();
}

@ -54,24 +54,26 @@ const router = new Router({
Vue.use(Meta) Vue.use(Meta)
import { TokenService } from "@Global/services/storage.services";
router.beforeEach((to, from, next) => { router.beforeEach((to, from, next) => {
// const isPublic = to.matched.some(record => record.meta.public); const isPublic = to.matched.some(record => record.meta.public);
// const onlyWhenLoggedOut = to.matched.some(record => record.meta.onlyWhenLoggedOut); const onlyWhenLoggedOut = to.matched.some(
// const roles = (to.meta && to.meta.roles) ? to.meta.roles : null; record => record.meta.onlyWhenLoggedOut
);
const roles = to.meta && to.meta.roles ? to.meta.roles : null;
const loggedIn = !!TokenService.getToken();
// if (!isPublic && !loggedIn) { if (!isPublic && !loggedIn) {
// return next({ return window.location.href = '/Login?redirect='+to.fullPath;
// path:'/login', }
// query: {redirect: to.fullPath} // Store the full path to redirect the user to after login
// });
// }
// // Do not allow user to visit login page or register page if they are logged in // Do not allow user to visit login page or register page if they are logged in
// if (loggedIn && onlyWhenLoggedOut && policy) { if (loggedIn && onlyWhenLoggedOut && policy) {
// return next('/') return window.location.href = '/Main';
// } }
next(); next();
}); });
export default router export default router

@ -1,15 +0,0 @@
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
export default new Vuex.Store({
state: {
UserDetails: false,
UserRoles: false,
OrderDetails: false,
OrderStatus: false,
SendEmail: false,
SendSMS: false
}
})

@ -0,0 +1,4 @@
export default {
};

@ -0,0 +1,4 @@
export default {
getClientTypes: state => state.clientTypes,
getPhoneTypes: state => state.phoneTypes
};

@ -0,0 +1,31 @@
/**
* Vuex
*
* @library
*
* https://vuex.vuejs.org/en/
*/
// Lib imports
import Vue from 'vue'
import Vuex from 'vuex'
// Store functionality
import actions from './actions'
import getters from './getters'
import modules from './modules'
import mutations from './mutations'
import state from './state'
Vue.use(Vuex)
// Create a new store
const store = new Vuex.Store({
actions,
getters,
modules,
mutations,
state
})
export default store

@ -0,0 +1,56 @@
const requireCurrentModule = require.context('.', true, /\.js$/);
const requireGlobalModule = require.context('@Global/store/modules', true, /\.js$/)
const requireCoreModule = require.context('@Core/store/modules', true, /\.js$/)
const modules = {};
requireCurrentModule.keys().forEach(fileName => {
if (fileName === './index.js') return
// Replace ./ and .js
const path = fileName.replace(/(\.\/|\.js)/g, '')
const [moduleName, imported] = path.split('/')
if (!modules[moduleName]) {
modules[moduleName] = {
namespaced: true
}
}
modules[moduleName][imported] = requireCurrentModule(fileName).default
});
requireGlobalModule.keys().forEach(fileName => {
if (fileName === './index.js') return
// Replace ./ and .js
const path = fileName.replace(/(\.\/|\.js)/g, '')
const [moduleName, imported] = path.split('/')
if (!modules[moduleName]) {
modules[moduleName] = {
namespaced: true
}
}
modules[moduleName][imported] = requireGlobalModule(fileName).default
});
requireCoreModule.keys().forEach(fileName => {
if (fileName === './index.js') return
// Replace ./ and .js
const path = fileName.replace(/(\.\/|\.js)/g, '')
const [moduleName, imported] = path.split('/')
if (!modules[moduleName]) {
modules[moduleName] = {
namespaced: true
}
}
modules[moduleName][imported] = requireCoreModule(fileName).default
});
export default modules

@ -0,0 +1,3 @@
export default {
};

@ -0,0 +1,4 @@
export default {
};

@ -1,40 +0,0 @@
<template>
<v-app>
<div id="app">
<wm-background></wm-background>
<app-menu></app-menu>
<v-content>
<v-container fluid class="Login">
<div class="Tile">
<router-view></router-view>
<!-- <wm-tiles-layout></wm-tiles-layout> -->
</div>
</v-container>
</v-content>
</div>
</v-app>
</template>
<script>
import Background from '@Global/components/Body/Backgrounds/Gradient';
import Menu from '@Global/components/Drawer/SideBar';
export default {
components: {
'wm-background':Background,
appMenu: Menu,
},
};
</script>
<style lang="scss" scoped>
#app {
background-color: transparent;
// -webkit-font-smoothing: antialiased;
// -moz-osx-font-smoothing: grayscale;
}
.WM-Container-Fluid {
width: 100%;
height: 100%;
}
</style>

@ -1,82 +0,0 @@
import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
import VueScrollReveal from 'vue-scroll-reveal'
import Vuetify from 'vuetify'
import {global} from '../Global/mixins/global';
import 'popper.js'
import 'bootstrap-v4-rtl'
import 'bootstrap-v4-rtl/scss/bootstrap-rtl.scss'
import 'bootstrap-select'
import 'bootstrap-select/dist/css/bootstrap-select.css'
import 'vuetify/dist/vuetify.min.css' // Ensure you are using css-loader
import '@Global/assets/Font-Icons/css/fontello.css'
import "@Global/scss/style.scss"
// components
import PartTitle from "@Global/components/Dividers/PartTitle.vue";
import PageTitle from "@Global/components/Dividers/PageTitle.vue";
import Checkbox from "@Global/components/Inputs/Checkbox.vue";
import InfoBlock from "@Global/components/Misc/InfoBlock.vue";
import Breadcrumbs from '@Global/components/Misc/Breadcrumbs';
Vue.component('WM-PartTitle', PartTitle)
Vue.component('WM-PageTitle', PageTitle)
Vue.component('WM-Checkbox', Checkbox)
Vue.component('WM-InfoBlock', InfoBlock)
Vue.component('wm-breadcrumbs', Breadcrumbs)
/**
* First we will load all of this project's JavaScript dependencies which
* includes Vue and other libraries. It is a great starting point when
* building robust, powerful web applications using Vue and Laravel.
*/
window.Vue = require('vue');
/**
* The following block of code may be used to automatically register your
* Vue components. It will recursively scan this directory for the Vue
* components and automatically register them with their "basename".
*
* Eg. ./components/ExampleComponent.vue -> <example-component></example-component>
*/
// const files = require.context('./', true, /\.vue$/i)
// files.keys().map(key => Vue.component(key.split('/').pop().split('.')[0], files(key).default))
/**
* Next, we will create a fresh Vue application instance and attach it to
* the page. Then, you may begin adding components to this application
* or customize the JavaScript scaffolding to fit your unique needs.
*/
Vue.use(Vuetify, {
iconfont: 'fa',
rtl: true,
});
// Vue.config.productionTip = false;
Vue.use(VueScrollReveal, {
class: 'v-scroll-reveal', // A CSS class applied to elements with the v-scroll-reveal directive; useful for animation overrides.
duration: 800,
scale: 1,
distance: '10px',
mobile: false
});
Vue.mixin(global);
const app = new Vue({
router,
store,
render: h => h(App),
}).$mount('#app');

@ -1,57 +0,0 @@
<template>
<v-dialog v-model="$store.state.ConfigUserDepartmentAdd" width="30%" transition="slide-x-transition">
<v-card class="RTL">
<v-card-title class=" grey lighten-3" primary-title>
<WM-PartTitle class="WM-Margin-T-20" TitleFa=" افزودن دپارتمان " TitleEn=" Add a Deaprtment " color="orange"></WM-PartTitle>
</v-card-title>
<v-card-text>
<div class="row">
<v-flex lg12>
<v-card-text>
<v-autocomplete prepend-icon="fas fa-align-right" :items="departments" color="orange" item-text="name_fa" label=" دپارتمان مادر "></v-autocomplete>
<v-text-field label=" نام فارسی بخش یا دپارتمان " color="orange" prepend-icon="fas fa-tag" ></v-text-field>
<v-text-field label=" Deparment or Section Name " color="orange" prepend-icon="fas fa-tag" ></v-text-field>
</v-card-text>
</v-flex>
</div>
</v-card-text>
<v-divider></v-divider>
<v-card-actions>
<v-spacer></v-spacer>
<v-btn color="orange" depressed dark @click="$store.state.ConfigUserDepartmentAdd = false">
<v-icon dark right>fas fa-check</v-icon> تایید اطاعلاعات
</v-btn>
</v-card-actions>
</v-card>
</v-dialog>
</template>
<script>
export default {
props: {
},
data () {
return {
departments: [
{
name_fa: " فنی ",
name_en: " Technical ",
},
{
name_fa: " فروش ",
name_en: " Sale ",
},
{
name_fa: " مدیریت ",
name_en: " Management ",
}
]
}
}
};
</script>

@ -1,31 +0,0 @@
<template>
<v-flex lg12 style="position:relative; padding: 0px 15px;">
<v-card-text class="Duplicate">
<v-layout row wrap pl-2>
<v-flex lg6>
<v-text-field label=" نام فارسی دپارتمان " color="cyan" prepend-icon="fas fa-bars"></v-text-field>
</v-flex>
<v-flex lg6>
<v-text-field label=" Department English Name " color="cyan" prepend-icon="fas fa-bars"></v-text-field>
</v-flex>
<v-btn fab color="cyan" fixed bottom left dark style="left:-15px; bottom:-30px; position:absolute"><v-icon dark>fas fa-plus</v-icon></v-btn>
<v-btn fab small color="red" fixed bottom left dark style="left:-5px; top:-20px; position:absolute"><v-icon dark>fas fa-times</v-icon></v-btn>
</v-layout>
<v-flex lg12 style="position:relative; padding: 0px 15px; margin: 0px 20px;">
<v-card-text class="Duplicate">
<v-layout row wrap pl-2>
<v-flex lg6>
<v-text-field label=" نام فارسی بخش " color="cyan" prepend-icon="fas fa-align-right"></v-text-field>
</v-flex>
<v-flex lg6>
<v-text-field label=" Section English Name " color="cyan" prepend-icon="fas fa-align-right"></v-text-field>
</v-flex>
<v-btn fab small color="cyan" fixed bottom left dark style="left:-5px; bottom:-25px; position:absolute"><v-icon dark>fas fa-plus</v-icon></v-btn>
<v-btn fab small color="red" fixed bottom left dark style="left:-5px; top:-20px; position:absolute"><v-icon dark>fas fa-times</v-icon></v-btn>
</v-layout>
</v-card-text>
</v-flex>
</v-card-text>
</v-flex>
</template>

@ -1,141 +0,0 @@
<template>
<v-container>
<v-layout row wrap>
<v-flex xs12 lg12 mb-3>
<v-expansion-panel popout>
<v-expansion-panel-content v-for="(department,i) in departments" :key="i">
<template v-slot:header>
<v-flex lg4 pt-2 class="text-lg-right FA">
<span class="TitleNumber En">{{ parseInt(i+1) }}.</span>
{{ department.name_fa }}
</v-flex>
<v-flex lg4 pt-2 class="LTR EN">{{ department.name_en }}</v-flex>
<v-flex xl4 class="Buttons text-lg-center">
<v-tooltip top color="black">
<v-btn small slot="activator" fab color="cyan" dark>
<v-icon dark>fas fa-pencil-alt</v-icon>
</v-btn>
<span> ویرایش </span>
</v-tooltip>
<v-tooltip top color="black">
<v-btn small @click.native="$store.state.ConfigUserDepartmentAdd = true" slot="activator" fab color="orange" dark>
<v-icon dark>fas fa-plus</v-icon>
</v-btn>
<span> افزودن زیر مجمموعه </span>
</v-tooltip>
<v-tooltip top color="black">
<v-btn small slot="activator" fab color="red" dark>
<v-icon dark>fas fa-trash-alt</v-icon>
</v-btn>
<span> حذف آیتم </span>
</v-tooltip>
</v-flex>
</template>
<v-card>
<v-card-text style="padding:5px 30px">
<div class="WM-Tile" v-for="(section,j) in department.sections" :key="j">
<v-layout row wrap class="Content">
<div class="Number En">{{ parseInt(j+1)+'-'+parseInt(i+1) }}</div>
<v-flex lg4 class="text-lg-right zIndex99" pt-3>{{ section.name_fa }}</v-flex>
<v-flex lg4 class="LTR" pt-3>{{ section.name_en }}</v-flex>
<v-flex xl4 class="Buttons text-lg-center">
<v-tooltip top color="black">
<v-btn small slot="activator" fab color="cyan" dark>
<v-icon dark>fas fa-pencil-alt</v-icon>
</v-btn>
<span>ویرایش</span>
</v-tooltip>
<v-tooltip top color="black">
<v-btn small slot="activator" fab color="red" dark>
<v-icon dark>fas fa-trash-alt</v-icon>
</v-btn>
<span>حذف آیتم</span>
</v-tooltip>
</v-flex>
</v-layout>
</div>
</v-card-text>
</v-card>
</v-expansion-panel-content>
</v-expansion-panel>
</v-flex>
</v-layout>
<!-- --------------------------------------------------------------------
Modals :: BEGIN
-------------------------------------------------------------------- -->
<template>
<div class="text-xs-center">
<wm-user-departments-add></wm-user-departments-add>
</div>
</template>
<!-- --------------------------------------------------------------------
Modals :: END
-------------------------------------------------------------------- -->
</v-container>
</template>
<script>
import DepartmentAdd from "@User/components/Config/Department/Add.vue";
export default {
components: {
"wm-user-departments-add": DepartmentAdd
},
data() {
return {
departments: [
{
name_fa: " فنی ",
name_en: " Technical ",
sections: [
{ name_fa: " برنامه نویسی ", name_en: " Programming " },
{ name_fa: " گرافیک ", name_en: " Graphic " },
{ name_fa: " امور اپراتوری ", name_en: " Operating Matters " }
]
},
{
name_fa: " فروش ",
name_en: " Sale ",
sections: [
{ name_fa: " تحقیق و توسعه ", name_en: " Research & Developement " },
{ name_fa: " بازرایابی ", name_en: " Marketing " },
{ name_fa: " قراردادها ", name_en: " Contracts " }
]
},
{
name_fa: " مدیریت ",
name_en: " Management ",
sections: [
{ name_fa: " مدیریت اجرایی ", name_en: " Operaing Management " },
{ name_fa: " مدیریت منابع انسانی ", name_en: " Human Resource " }
]
}
]
};
}
};
</script>
<style lang="scss">
@import "@Global/scss/Tile.scss";
.WM-Tile {
padding: 0px;
}
.Content .Number {
width: auto;
right: 0px;
bottom: -6px;
}
.v-expansion-panel__container--active .v-expansion-panel__header .FA,
.v-expansion-panel__container--active .v-expansion-panel__header .EN {
font-size: 24px;
}
.TitleNumber {
line-height: 40px;
width: 40px;
font-size: 40px;
color: rgb(0, 0, 0);
}
.v-expansion-panel--inset .v-expansion-panel__container--active,
.v-expansion-panel--popout .v-expansion-panel__container--active {
border: 1px solid #000 !important;
box-shadow: none;
}
</style>

@ -1,38 +0,0 @@
<template>
<v-dialog v-model="$store.state.ConfigUserDepartments" width="60%" transition="slide-x-transition">
<v-card class="RTL">
<v-card-title class=" grey lighten-3" primary-title>
<WM-PartTitle class="WM-Margin-T-20" TitleFa=" ویرایش دپارتمان ها " TitleEn=" Edit Deparments " color="cyan"></WM-PartTitle>
</v-card-title>
<v-card-text>
<!-- <wm-duplicator-view></wm-duplicator-view> -->
<wm-list-view></wm-list-view>
</v-card-text>
<v-divider></v-divider>
<v-card-actions>
<v-spacer></v-spacer>
<v-btn color="cyan" depressed dark @click="$store.state.ConfigUserDepartments = false">
<v-icon dark right>fas fa-check</v-icon> بسیار خب
</v-btn>
</v-card-actions>
</v-card>
</v-dialog>
</template>
<script>
// import DuplicatorView from "@User/components/Config/Department/DuplicatorView.vue";
import ListView from "@User/components/Config/Department/ListView.vue";
export default {
components: {
// 'wm-duplicator-view' : DuplicatorView,
'wm-list-view' : ListView,
},
props: {
Color: { default: 'grey darken-4' },
},
};
</script>

@ -1,45 +0,0 @@
<template>
<v-dialog v-model="$store.state.UserDetails" width="60%" transition="slide-x-transition">
<v-card class="RTL">
<v-card-title class=" grey lighten-3" primary-title>
<WM-PartTitle class="WM-Margin-T-20" TitleFa=" جزئیات کاربر " TitleEn=" User's Details " color="cyan"></WM-PartTitle>
</v-card-title>
<v-card-text>
<div class="row">
<div class="col-md-3 WM-Align-R">
<div class="WM-Font-14 WM-Color-Gray"><i class="WMi-user"></i> نام و نام خانوادگی </div>
<div class="WM-Font-20"> علیرضا حسنی </div>
</div>
<div class="col-md-6 WM-Align-R">
<div class="WM-Font-14 WM-Color-Gray"><i class="WMi-mail-alt"></i> آدرس آیمیل </div>
<div class="WM-Font-20"> Alireza-Hassani@outlook.com </div>
</div>
<div class="col-md-3 WM-Align-R">
<div class="WM-Font-14 WM-Color-Gray"><i class="WMi-phone"></i> شماره ی همراه </div>
<div class="WM-Font-20"> 09127004945 </div>
</div>
</div>
</v-card-text>
<v-divider></v-divider>
<v-card-actions>
<v-spacer></v-spacer>
<v-btn color="cyan" depressed dark @click="$store.state.UserDetails = false">
<v-icon dark right>fas fa-check</v-icon> بسیار خب
</v-btn>
</v-card-actions>
</v-card>
</v-dialog>
</template>
<script>
export default {
props: {
Color: { default: 'grey darken-4' },
},
};
</script>

@ -1,45 +0,0 @@
<template>
<v-layout row wrap class="Filters WM-Padding-10 WM-Border WM-Border-LightGray" style="border-right:2px solid #32c5d2;">
<v-flex xs12 sm4 md3>
<v-menu :close-on-content-click="false" v-model="DateFilterBefore" :nudge-right="40" lazy transition="slide-y-transition" offset-y full-width min-width="290px">
<v-text-field slot="activator" v-model="date" label=" تاریخ ثبت قبل از " prepend-icon="fas fa-calendar-alt" color="red darken-2" readonly></v-text-field>
<v-date-picker v-model="date" @input="DateFilterBefore = false" color="red darken-1" locale="fa-ir"></v-date-picker>
</v-menu>
</v-flex>
<v-flex xs12 sm4 md3>
<v-menu :close-on-content-click="false" v-model="DateFilterAfter" :nudge-right="40" lazy transition="slide-y-transition" offset-y full-width min-width="290px">
<v-text-field slot="activator" v-model="date" label=" تاریخ ثبت بعد از " prepend-icon="fas fa-calendar-alt" color="red darken-2" readonly></v-text-field>
<v-date-picker v-model="date" @input="DateFilterAfter = false" color="red darken-1" locale="fa-ir"></v-date-picker>
</v-menu>
</v-flex>
<v-flex xs12 sm4 md3>
<v-text-field label=" نام کاربر " color="red darken-2" prepend-icon="fas fa-search"></v-text-field>
</v-flex>
<v-flex xs12 sm4 md3>
<v-tooltip top color="black">
<v-btn slot="activator" fab color="cyan" dark><v-icon dark>fas fa-filter</v-icon></v-btn>
<span> فیلتر سفارشات </span>
</v-tooltip>
</v-flex>
</v-layout>
</template>
<script>
export default {
data: function () {
return {
date: new Date().toISOString().substr(0, 10),
DateFilterAfter: false,
DateFilterBefore: false,
}
}
};
</script>
<style scoped lang="scss">
.Filters {
margin: 20px 0px 10px 0px;
}
</style>

@ -1,149 +0,0 @@
<template>
<v-flex :class="TileClass" >
<div class="WM-Tile">
<v-layout row wrap class="Content">
<div class="Check">
<WM-Checkbox v-model="props.selected" ItemText="" :ItemID="'Check'+props.item.id"></WM-Checkbox>
</div>
<div class="Number En">12</div>
<v-flex xl3 @click="$store.state.ClientDetails = true" slot="activator">
<div class="Info">
<div class="TitleFa">
<v-badge color="red">
<span> {{ props.item.TitleFa }} </span>
</v-badge>
</div>
<div class="TitleEn Context"> {{ props.item.TitleEn }} </div>
</div>
</v-flex>
<v-flex xl3 class="Tasks text-lg-center">
<v-chip color="grey lighten-3" text-color="black" @click="$store.state.TaskTimeline = true" slot="activator">
<v-avatar class="purple WM-Color-White"> 2 </v-avatar>
وظیفه انجام نشده
</v-chip>
<v-btn small outline fab color="purple" @click.native="$store.state.TaskAdd = true" slot="activator">
<v-icon>fas fa-plus</v-icon>
</v-btn>
</v-flex>
<v-flex xl3 class="text-lg-center">
<v-chip color="grey lighten-3" text-color="black" @click="$store.state.UserRoles = true" slot="activator">
<v-avatar class="black WM-Color-White"> 2 </v-avatar>
دسترسی
</v-chip>
<v-btn small outline fab color="black" @click.native="$store.state.UserRoles = true" slot="activator">
<v-icon>fas fa-pencil-alt</v-icon>
</v-btn>
</v-flex>
<v-flex xl3 class="Buttons text-lg-right">
<v-tooltip top color="black">
<v-btn small slot="activator" fab color="grey lighten-4"><v-icon dark>fas fa-pencil-alt</v-icon></v-btn>
<span> ویرایش </span>
</v-tooltip>
<v-tooltip top color="black">
<v-btn small @click.native="$store.state.UserDetails = true" slot="activator" fab color="cyan" dark><v-icon dark>fas fa-align-right</v-icon></v-btn>
<span> جزئیات مشتری </span>
</v-tooltip>
<v-tooltip top color="black">
<v-btn small @click.native="$store.state.SendEmail = true" slot="activator" fab color="purple" dark><v-icon dark>fas fa-envelope</v-icon></v-btn>
<span> ارسال ایمیل </span>
</v-tooltip>
<v-tooltip top color="black">
<v-btn small @click.native="$store.state.SendSMS = true" slot="activator" fab color="orange" dark><v-icon dark>fas fa-comment-alt</v-icon></v-btn>
<span> ارسال پیام کوتاه </span>
</v-tooltip>
<v-tooltip top color="black">
<v-btn small slot="activator" fab color="red" dark><v-icon dark>fas fa-trash-alt</v-icon></v-btn>
<span> حذف آیتم </span>
</v-tooltip>
</v-flex>
</v-layout>
</div>
</v-flex>
</template>
<script>
export default {
props: {
TileClass: { default: "xl12" },
props: { default: "" },
},
}
</script>
<style scoped lang="scss">
.WM-Tile {
width:100%;
padding:10px;
border: 1px solid #eeeeee;
transition: 0.4s;
border-radius: 5px;
margin-bottom: 10px;
}
.WM-Tile:hover {
border: 1px solid #000;
}
.WM-Tile.Shadowed {
box-shadow: 0 10px 30px 0 rgba(0,0,0,.5);
border-radius:5px;
}
.WM-Tile .Content {
background-color:#fff;
height:100%;
}
.WM-Tile .Image {
width:100%;
}
.Content {
padding:10px;
margin:0px;
position: relative;
}
.Content .Info {
text-align:right;
margin-right: 30px;
cursor: pointer;
}
.Content .Check {
position: absolute;
right: 0px;
width: 40px;
}
.Content .Number {
position: absolute;
right: -14px;
bottom: -16px;
line-height: 40px;
width: 40px;
font-size: 40px;
color: rgb(224, 224, 224);
}
.Info .TitleEn {
font-size:13px;
}
//-----------------------------------Price
.Content .Price {
text-align:left;
}
.Content .Price .Unit {
font-size:12px;
}
.Price .NewPrice {
font-size:24px;
}
.Price .OldPrice {
font-size:14px;
margin-left: 20px;
text-decoration: line-through;
text-decoration-color: #ee3552;
color: #ee3552;
margin-top: -5px;
}
//---------------------------Buttons-------------------------------
.v-btn--floating.v-btn--outline.v-btn:hover {
background-color: inherit !important;
}
</style>

@ -1,69 +0,0 @@
<template>
<div>
<v-layout row wrap class="Content">
<v-flex xl3 class="text-lg-right" >
<span style="margin-right:65px;"> نام مشتری </span>
</v-flex>
<v-flex xl3 class="text-lg-center">
وظیفه ها
</v-flex>
<v-flex xl3 class="text-lg-center">
دسترسی ها
</v-flex>
<v-flex xl3 class="text-lg-right">
ابزارها
</v-flex>
</v-layout>
<v-data-iterator :items="Users" :rows-per-page-items="rowsPerPageItems" :pagination.sync="pagination" select-all row wrap rows-per-page-text="آیتم به ازای هر صفحه">
<template v-slot:item="props">
<wm-user-item :props="props"></wm-user-item>
</template>
<template v-slot:pageText="props">
آیتم {{ props.pageStart }} - {{ props.pageStop }} از {{ props.itemsLength }}
</template>
</v-data-iterator>
</div>
</template>
<script>
import UserItem from "@User/components/Item.vue";
export default {
components: {
'wm-user-item' : UserItem,
},
props: {
// Tile:TileData,
TileClass: { default: "xl12" },
TileHeight: { default: "70px" },
// --------------------------------------------
TitleFa: { default: " فرید الدین ساروی" },
TitleEn: { default: " Farid Saravi " },
Level: { default: 5 },
},
data: () => ({
rowsPerPageItems: [4, 8, 12],
pagination: {
rowsPerPage: 4
},
Users: [
{
id:1,
TitleFa: ' فرید الدین ساروی ',
TitleEn: ' Farid Saravi ',
},
{
id:2,
TitleFa: ' علیرضا حسنی ',
TitleEn: ' Alireza Hassani ',
},
{
id:13,
TitleFa: ' محمد سعید خاکبازان ',
TitleEn: ' Mohammad Saeed Khakbazan ',
},
]
})
};
</script>

@ -1,90 +0,0 @@
<template>
<v-dialog v-model="$store.state.AddRole" width="70%" transition="slide-x-transition">
<v-card class="RTL">
<v-card-title class=" grey lighten-3" primary-title>
<WM-PartTitle class="WM-Margin-T-20" TitleFa=" ایجاد نقش جدید " TitleEn=" Define a new Role " color="cyan"></WM-PartTitle>
</v-card-title>
<v-card-text>
<v-layout row wrap class="WM-Section" style="border-right-color: #32c5d2;">
<v-flex class="lg3 RTL text-lg-right">
<div class="Step En" style="color:#32c5d2;"> 01 </div>
<div class="Title">
<div class="FA"> کاربران </div>
<div class="EN"> Users </div>
</div>
<!-- <v-tooltip top color="black">
<v-btn small slot="activator" fab color="cyan" dark style="float:left; margin-left:10px;"><v-icon dark>fas fa-plus</v-icon></v-btn>
<span> افزودن نقش جدید </span>
</v-tooltip> -->
<!-- <v-switch style="float:left; margin-left:10px;" color="cyan" v-model="UserSwitch"></v-switch> -->
</v-flex>
<v-flex class="lg9">
<v-layout row wrap class="WM-Margin-0">
<v-flex class="lg6 WM-Flex RoleFlex">
<v-card-text>
<v-text-field label=" نام نقش به فارسی " color="cyan" prepend-icon="fas fa-tag" ></v-text-field>
</v-card-text>
</v-flex>
<v-flex class="lg6 WM-Flex RoleFlex">
<v-card-text>
<v-text-field label=" Role Name - English " class="LTR" color="cyan" prepend-icon="fas fa-tag" ></v-text-field>
</v-card-text>
</v-flex>
</v-layout>
<v-layout row wrap class="WM-Margin-0">
<v-flex class="lg4 WM-Flex RoleFlex">
<v-switch color="cyan" v-model="UserAdd" label=" افزودن کاربر "></v-switch>
</v-flex>
<v-flex class="lg4 WM-Flex RoleFlex">
<v-switch color="cyan" v-model="UserEdit" label=" ویرایش کاربر "></v-switch>
</v-flex>
<v-flex class="lg4 WM-Flex RoleFlex">
<v-switch color="cyan" v-model="UserRemove" label=" حذف کاربر "></v-switch>
</v-flex>
<v-flex class="lg4 WM-Flex RoleFlex">
<v-switch color="cyan" v-model="EditRoles" label=" ویرایش دسترسی ها "></v-switch>
</v-flex>
<v-flex class="lg4 WM-Flex RoleFlex">
<v-switch color="cyan" v-model="Contact" label=" ارسال پیام کوتاه یا ایمیل "></v-switch>
</v-flex>
<v-flex class="lg4 WM-Flex RoleFlex">
<v-switch color="cyan" v-model="DoTask" label=" قابلیت انجام وظیفه "></v-switch>
</v-flex>
<v-flex class="lg4 WM-Flex RoleFlex">
<v-switch color="cyan" v-model="DefineTask" label=" قابلیت انجام وظیفه "></v-switch>
</v-flex>
</v-layout>
</v-flex>
</v-layout>
</v-card-text>
<v-divider></v-divider>
<v-card-actions>
<v-spacer></v-spacer>
<v-btn color="cyan" depressed dark @click="$store.state.AddRole = false">
<v-icon dark right>fas fa-plus</v-icon> افزودن نقش
</v-btn>
</v-card-actions>
</v-card>
</v-dialog>
</template>
<script>
export default {
props: {
},
data () {
return {
status: [
{ name: ' بسته شده ', id: 1 },
{ name: ' ویزیت اولیه ', id: 2 },
{ name: ' انصراف داده ', id: 3 },
],
UserSwitch: true,
}
}
};
</script>

@ -1,170 +0,0 @@
<template>
<v-dialog v-model="$store.state.UserRoles" width="70%" transition="slide-x-transition">
<v-card class="RTL">
<v-card-title class=" grey lighten-3" primary-title>
<WM-PartTitle class="WM-Margin-T-20" TitleFa=" دسترسی های کاربر " TitleEn=" User's Access " color="black"></WM-PartTitle>
</v-card-title>
<v-card-text>
<v-layout row wrap class="WM-Section" style="border-right-color: #32c5d2;">
<v-flex class="lg3 RTL text-lg-right">
<div class="Step En" style="color:#32c5d2;"> 01 </div>
<div class="Title">
<div class="FA"> کاربران </div>
<div class="EN"> Users </div>
</div>
<v-tooltip top color="black">
<v-btn small slot="activator" @click.native="$store.state.AddRole = true" fab color="cyan" dark style="float:left; margin-left:10px;"><v-icon dark>fas fa-plus</v-icon></v-btn>
<span> افزودن نقش جدید در بخش مدیریت کاربران سیستم</span>
</v-tooltip>
<!-- <v-switch style="float:left; margin-left:10px;" color="cyan" v-model="UserSwitch"></v-switch> -->
</v-flex>
<v-flex class="lg9">
<v-layout row wrap class="WM-Margin-0">
<v-flex class="lg4 WM-Flex RoleFlex">
<WM-Checkbox ItemText=" مدیر سطح 1 " ItemID="UserAdminL1"></WM-Checkbox>
<v-tooltip bottom color="black">
<v-btn class="XS" style="margin:-7px 10px 0px 0px;" @click.native="$store.state.AddRole = true" slot="activator" outline fab color="black" dark><v-icon dark>fas fa-pencil-alt</v-icon></v-btn>
<span> ویرایش نقش </span>
</v-tooltip>
</v-flex>
<v-flex class="lg4 WM-Flex RoleFlex">
<WM-Checkbox ItemText=" مدیر سطح 2 " ItemID="UserAdminL2"></WM-Checkbox>
<v-tooltip bottom color="black">
<v-btn class="XS" style="margin:-7px 10px 0px 0px;" @click.native="$store.state.AddRole = true" slot="activator" outline fab color="black" dark><v-icon dark>fas fa-pencil-alt</v-icon></v-btn>
<span> ویرایش نقش </span>
</v-tooltip>
</v-flex>
</v-layout>
</v-flex>
</v-layout>
<v-layout row wrap class="WM-Section" style="border-right-color: #ee3552;">
<v-flex class="lg3 RTL text-lg-right">
<div class="Step En" style="color:#ee3552;"> 02 </div>
<div class="Title">
<div class="FA"> مدیریت ارتباط با مشتری </div>
<div class="EN"> CRM </div>
</div>
<v-tooltip top color="black">
<v-btn small @click.native="$store.state.AddRole = true" slot="activator" fab color="red" dark style="float:left; margin-left:10px;"><v-icon dark>fas fa-plus</v-icon></v-btn>
<span> افزودن نقش جدید در بخش مدیریت ارتباط با مشتری</span>
</v-tooltip>
<!-- <v-switch style="float:left; margin-left:10px;" color="red" v-model="UserSwitch"></v-switch> -->
</v-flex>
<v-flex class="lg9">
<v-layout row wrap class="WM-Margin-0">
<v-flex class="lg4 WM-Flex RoleFlex">
<WM-Checkbox ItemText=" مدیر وظایف " ItemID="CRMTasksAdmin"></WM-Checkbox>
<v-tooltip bottom color="black">
<v-btn class="XS" style="margin:-7px 10px 0px 0px;" @click.native="$store.state.AddRole = true" slot="activator" outline fab color="black" dark><v-icon dark>fas fa-pencil-alt</v-icon></v-btn>
<span> ویرایش نقش </span>
</v-tooltip>
</v-flex>
<v-flex class="lg4 WM-Flex RoleFlex">
<WM-Checkbox ItemText=" مدیر مشتریان " ItemID="CRMClientsAdmin"></WM-Checkbox>
<v-tooltip bottom color="black">
<v-btn class="XS" style="margin:-7px 10px 0px 0px;" @click.native="$store.state.AddRole = true" slot="activator" outline fab color="black" dark><v-icon dark>fas fa-pencil-alt</v-icon></v-btn>
<span> ویرایش نقش </span>
</v-tooltip>
</v-flex>
<v-flex class="lg4 WM-Flex RoleFlex">
<WM-Checkbox ItemText=" مدیر رویدادها " ItemID="CRMClientsAdmin"></WM-Checkbox>
<v-tooltip bottom color="black">
<v-btn class="XS" style="margin:-7px 10px 0px 0px;" @click.native="$store.state.AddRole = true" slot="activator" outline fab color="black" dark><v-icon dark>fas fa-pencil-alt</v-icon></v-btn>
<span> ویرایش نقش </span>
</v-tooltip>
</v-flex>
<v-flex class="lg4 WM-Flex RoleFlex">
<WM-Checkbox ItemText=" مدیر تراکنش ها " ItemID="CRMClientsAdmin"></WM-Checkbox>
<v-tooltip bottom color="black">
<v-btn class="XS" style="margin:-7px 10px 0px 0px;" @click.native="$store.state.AddRole = true" slot="activator" outline fab color="black" dark><v-icon dark>fas fa-pencil-alt</v-icon></v-btn>
<span> ویرایش نقش </span>
</v-tooltip>
</v-flex>
</v-layout>
</v-flex>
</v-layout>
<v-layout row wrap class="WM-Section" style="border-right-color: #FF6B57;">
<v-flex class="lg3 RTL text-lg-right">
<div class="Step En" style="color:#FF6B57;"> 03 </div>
<div class="Title">
<div class="FA"> فروشگاه </div>
<div class="EN"> Store </div>
</div>
<v-tooltip top color="black">
<v-btn small slot="activator" fab color="orange" dark style="float:left; margin-left:10px;"><v-icon dark>fas fa-plus</v-icon></v-btn>
<span> افزودن نقش جدید در بخش فروشگاه </span>
</v-tooltip>
<!-- <v-switch style="float:left; margin-left:10px;" color="orange" v-model="UserSwitch"></v-switch> -->
</v-flex>
<v-flex class="lg9">
<v-layout row wrap class="WM-Margin-0">
<v-flex class="lg4 WM-Flex RoleFlex">
<WM-Checkbox ItemText=" مدیر محصولات " ItemID="StoreProducts"></WM-Checkbox>
<v-tooltip bottom color="black">
<v-btn class="XS" style="margin:-7px 10px 0px 0px;" @click.native="$store.state.AddRole = true" slot="activator" outline fab color="black" dark><v-icon dark>fas fa-pencil-alt</v-icon></v-btn>
<span> ویرایش نقش </span>
</v-tooltip>
</v-flex>
<v-flex class="lg4 WM-Flex RoleFlex">
<WM-Checkbox ItemText=" مدیر تخفیف ها " ItemID="StoreProducts"></WM-Checkbox>
<v-tooltip bottom color="black">
<v-btn class="XS" style="margin:-7px 10px 0px 0px;" @click.native="$store.state.AddRole = true" slot="activator" outline fab color="black" dark><v-icon dark>fas fa-pencil-alt</v-icon></v-btn>
<span> ویرایش نقش </span>
</v-tooltip>
</v-flex>
<v-flex class="lg4 WM-Flex RoleFlex">
<WM-Checkbox ItemText=" مدیر سفارشات " ItemID="StoreProducts"></WM-Checkbox>
<v-tooltip bottom color="black">
<v-btn class="XS" style="margin:-7px 10px 0px 0px;" @click.native="$store.state.AddRole = true" slot="activator" outline fab color="black" dark><v-icon dark>fas fa-pencil-alt</v-icon></v-btn>
<span> ویرایش نقش </span>
</v-tooltip>
</v-flex>
<v-flex class="lg4 WM-Flex RoleFlex">
<WM-Checkbox ItemText=" مدیر فروش های ویژه " ItemID="StoreProducts"></WM-Checkbox>
<v-tooltip bottom color="black">
<v-btn class="XS" style="margin:-7px 10px 0px 0px;" @click.native="$store.state.AddRole = true" slot="activator" outline fab color="black" dark><v-icon dark>fas fa-pencil-alt</v-icon></v-btn>
<span> ویرایش نقش </span>
</v-tooltip>
</v-flex>
</v-layout>
</v-flex>
</v-layout>
</v-card-text>
<v-divider></v-divider>
<v-card-actions>
<v-spacer></v-spacer>
<v-btn color="black" depressed dark @click="$store.state.UserRoles = false">
<v-icon dark right>fas fa-check</v-icon> تایید دسترسی ها
</v-btn>
</v-card-actions>
</v-card>
</v-dialog>
</template>
<script>
export default {
props: {
},
data () {
return {
status: [
{ name: ' بسته شده ', id: 1 },
{ name: ' ویزیت اولیه ', id: 2 },
{ name: ' انصراف داده ', id: 3 },
],
UserSwitch: true,
}
}
};
</script>
<style lang="scss" scoped>
.RoleFlex {
height: 45px;
align-items: center;
}
</style>

@ -1,104 +0,0 @@
<template>
<v-dialog v-model="$store.state.UserRoles" width="70%" transition="slide-x-transition">
<v-card class="RTL">
<v-card-title class=" grey lighten-3" primary-title>
<WM-PartTitle class="WM-Margin-T-20" TitleFa=" دسترسی های کاربر " TitleEn=" User's Access " color="black"></WM-PartTitle>
</v-card-title>
<v-card-text>
<v-layout row wrap class="WM-Section" style="border-right-color: #32c5d2;">
<v-flex class="lg3 RTL text-lg-right">
<div class="Step En" style="color:#32c5d2;"> 01 </div>
<div class="Title">
<div class="FA"> کاربران </div>
<div class="EN"> Users </div>
</div>
<v-tooltip top color="black">
<v-btn small slot="activator" fab color="cyan" dark style="float:left; margin-left:10px;"><v-icon dark>fas fa-plus</v-icon></v-btn>
<span> افزودن نقش جدید </span>
</v-tooltip>
<!-- <v-switch style="float:left; margin-left:10px;" color="cyan" v-model="UserSwitch"></v-switch> -->
</v-flex>
<v-flex class="lg2">
<WM-Checkbox ItemText=" افزودن کاربر " ItemID="UserAdd"></WM-Checkbox>
<WM-Checkbox ItemText=" ویرایش کاربر " ItemID="ClientDelete"></WM-Checkbox>
<WM-Checkbox ItemText=" حذف کاربر " ItemID="UserDelete"></WM-Checkbox>
</v-flex>
<v-flex class="lg2">
<WM-Checkbox ItemText=" ویرایش دسترسی ها " ItemID="UserRoles"></WM-Checkbox>
<WM-Checkbox ItemText=" ارسال پیام کوتاه یا ایمیل " ItemID="UserContact"></WM-Checkbox>
</v-flex>
<v-flex class="lg2">
<WM-Checkbox ItemText=" قابلیت انجام وظیفه " ItemID="UserRoles"></WM-Checkbox>
<WM-Checkbox ItemText=" قابلیت تعریف وظیفه " ItemID="UserContact"></WM-Checkbox>
</v-flex>
</v-layout>
<v-layout row wrap class="WM-Section" style="border-right-color: #ee3552;">
<v-flex class="lg3 RTL text-lg-right">
<div class="Step En" style="color:#ee3552;"> 02 </div>
<div class="Title">
<div class="FA"> مدیریت ارتباط با مشتری </div>
<div class="EN"> CRM </div>
</div>
<v-switch style="float:left; margin-left:10px;" color="red" v-model="UserSwitch"></v-switch>
</v-flex>
<v-flex class="lg2">
<WM-Checkbox ItemText=" افزودن مشتری " ItemID="ClientAdd"></WM-Checkbox>
<WM-Checkbox ItemText=" ویرایش مشتری " ItemID="ClientDelete"></WM-Checkbox>
<WM-Checkbox ItemText=" حذف مشتری " ItemID="ClientDelete"></WM-Checkbox>
</v-flex>
<v-flex class="lg2">
<WM-Checkbox ItemText=" مدیریت مالی " ItemID="ClientFinance"></WM-Checkbox>
<WM-Checkbox ItemText=" ارسال پیام کوتاه یا ایمیل " ItemID="ClientContact"></WM-Checkbox>
</v-flex>
</v-layout>
<v-layout row wrap class="WM-Section" style="border-right-color: #FF6B57;">
<v-flex class="lg3 RTL text-lg-right">
<div class="Step En" style="color:#FF6B57;"> 03 </div>
<div class="Title">
<div class="FA"> فروشگاه </div>
<div class="EN"> Store </div>
</div>
<v-switch style="float:left; margin-left:10px;" color="orange" v-model="UserSwitch"></v-switch>
</v-flex>
<v-flex class="lg2">
<WM-Checkbox ItemText=" افزودن آیتم " ItemID="ClientAdd"></WM-Checkbox>
<WM-Checkbox ItemText=" ویرایش آیتم " ItemID="ClientAdd"></WM-Checkbox>
<WM-Checkbox ItemText=" حذف آیتم " ItemID="ClientDelete"></WM-Checkbox>
</v-flex>
<v-flex class="lg2">
<WM-Checkbox ItemText=" مدیریت مالی " ItemID="ClientFinance"></WM-Checkbox>
<WM-Checkbox ItemText=" ارسال پیام کوتاه یا ایمیل " ItemID="ClientContact"></WM-Checkbox>
</v-flex>
</v-layout>
</v-card-text>
<v-divider></v-divider>
<v-card-actions>
<v-spacer></v-spacer>
<v-btn color="black" depressed dark @click="$store.state.UserRoles = false">
<v-icon dark right>fas fa-check</v-icon> تایید دسترسی ها
</v-btn>
</v-card-actions>
</v-card>
</v-dialog>
</template>
<script>
export default {
props: {
},
data () {
return {
status: [
{ name: ' بسته شده ', id: 1 },
{ name: ' ویزیت اولیه ', id: 2 },
{ name: ' انصراف داده ', id: 3 },
],
UserSwitch: true,
}
}
};
</script>

@ -1,78 +0,0 @@
/**
* Vue Router
*
* @library
*
* https://router.vuejs.org/en/
*/
// Lib imports
import Vue from 'vue'
// import VueAnalytics from 'vue-analytics'
import Router from 'vue-router'
import Meta from 'vue-meta'
// Routes
import paths from './paths'
function route (options) {
let path = options.path;
let view = options.view;
let name = options.name;
let meta = (options.meta) ? options.meta : '';
return {
name: name || view,
path,
meta,
component: (resovle) => import(
`@User/views/${view}.vue`
).then(resovle)
}
}
Vue.use(Router)
// Create a new router
const router = new Router({
mode: 'history',
routes: paths.map(path => route(path)).concat([
{ path: '*', redirect: '/Home' }
]),
scrollBehavior (to, from, savedPosition) {
if (savedPosition) {
return savedPosition
}
if (to.hash) {
return { selector: to.hash }
}
return { x: 0, y: 0 }
}
})
Vue.use(Meta)
router.beforeEach((to, from, next) => {
// const isPublic = to.matched.some(record => record.meta.public);
// const onlyWhenLoggedOut = to.matched.some(record => record.meta.onlyWhenLoggedOut);
// const roles = (to.meta && to.meta.roles) ? to.meta.roles : null;
// if (!isPublic && !loggedIn) {
// return next({
// path:'/login',
// query: {redirect: to.fullPath} // Store the full path to redirect the user to after login
// });
// }
// // Do not allow user to visit login page or register page if they are logged in
// if (loggedIn && onlyWhenLoggedOut && policy) {
// return next('/')
// }
next();
});
export default router

@ -1,11 +0,0 @@
export default [{
path: '/User/List',
name: 'UserList',
view: 'List'
},
{
path: '/User/Add',
name: 'AddUser',
view: 'Add'
},
];

@ -1,18 +0,0 @@
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
export default new Vuex.Store({
state: {
UserDetails: false,
UserRoles: false,
AddRole: false,
ConfigUserDepartments: false,
ConfigUserDepartmentAdd: false,
TaskAdd: false,
TaskTimeline: false,
SendEmail: false,
SendSMS: false
}
})

@ -1,219 +0,0 @@
<template>
<v-container fluid>
<div class="Tile Shadowed Padd-0 WM-Margin-B-10" >
<wm-breadcrumbs LinkClass="WM-Link-Cyan" :items="breadcrumbItems"></wm-breadcrumbs>
</div>
<div class="Tile Shadowed">
<WM-PartTitle class="WM-Margin-T-20" TitleFa=" افزودن کاربر جدید " TitleEn=" Add a new User " Color="cyan"></WM-PartTitle>
<v-layout row wrap class="WM-Section" style="border-right-color: #32c5d2;">
<v-flex class="lg12 RTL text-lg-right">
<div class="Step En" style="color:#32c5d2;"> 01 </div>
<div class="Title">
<div class="FA"> اطلاعـــــات عمــــــومی </div>
<div class="EN"> General Info </div>
</div>
</v-flex>
<v-layout row wrap>
<v-flex class="lg4">
<v-card-text>
<v-autocomplete prepend-icon="fas fa-align-justify" :items="deparment" :filter="customFilter" color="cyan" item-text="name" label=" دپارتمان کاربر "></v-autocomplete>
</v-card-text>
</v-flex>
<v-flex class="lg4">
<v-card-text>
<v-autocomplete prepend-icon="fas fa-align-right" :items="deparment" :filter="customFilter" color="cyan" item-text="name" label=" اگر لازم است، دپارتمان کاربر را به طور جزئی تر مشخص کنید "></v-autocomplete>
</v-card-text>
</v-flex>
<v-flex pt-2 class="lg1 text-lg-right">
<v-tooltip bottom color="black">
<v-btn mt-4 small @click.native="$store.state.ConfigUserDepartments = true" slot="activator" outline fab color="black" dark><v-icon dark>fas fa-pencil-alt</v-icon></v-btn>
<span> ویرایش دپارتمان ها </span>
</v-tooltip>
</v-flex>
</v-layout>
<!-- --------------------------------------------------------------------
Gneral Info
-------------------------------------------------------------------- -->
<v-layout row wrap>
<v-flex lg3>
<v-card-text>
<v-text-field label=" نام کاربر به فارسی " color="cyan" prepend-icon="fas fa-tag" ></v-text-field>
</v-card-text>
</v-flex>
<v-flex lg3>
<v-card-text>
<v-text-field label=" نام کاربر به انگلیسی " color="cyan" prepend-icon="fas fa-tag"></v-text-field>
</v-card-text>
</v-flex>
<v-flex lg3>
<v-card-text>
<v-text-field label=" کد ملی و یا شماره گذرنامه " color="cyan" prepend-icon="fas fa-sort-numeric-up"></v-text-field>
</v-card-text>
</v-flex>
<v-flex lg3>
<v-card-text>
<v-text-field label=" آدرس پست الکترونیکی " color="cyan" prepend-icon="fas fa-envelope"></v-text-field>
</v-card-text>
</v-flex>
<v-flex lg3>
<v-card-text>
<v-text-field v-model="password" :append-icon="passwordShow ? 'fas fa-eye' : 'fas fa-eye-slash'" :rules="[rules.required, rules.min]"
:type="passwordShow ? 'text' : 'password'" label=" کلمه ی عبور " color="cyan" prepend-icon="fas fa-asterisk"
hint=" حداقل 8 کاراکتر " counter @click:append="passwordShow = !passwordShow">
</v-text-field>
</v-card-text>
</v-flex>
<v-flex lg3>
<v-card-text>
<v-text-field v-model="passwordRetype" :append-icon="passwordRetypeShow ? 'fas fa-eye' : 'fas fa-eye-slash'" :rules="[rules.required, rules.min]"
:type="passwordRetypeShow ? 'text' : 'password'" label=" تکرار کلمه ی عبور " color="cyan" prepend-icon="fas fa-asterisk"
hint=" حداقل 8 کاراکتر " counter @click:append="passwordRetypeShow = !passwordRetypeShow">
</v-text-field>
</v-card-text>
</v-flex>
</v-layout>
</v-layout>
<!-- --------------------------------------------------------------------
Contact Info
-------------------------------------------------------------------- -->
<v-layout row wrap class="WM-Section" style="border-right-color: #00838F;">
<v-flex class="lg12 RTL text-lg-right">
<div class="Step En" style="color:#00838F;"> 02 </div>
<div class="Title">
<div class="FA"> اطلاعــــــات تمــــــاس </div>
<div class="EN"> Contact Info </div>
</div>
</v-flex>
<v-flex lg2>
<v-card-text>
<v-autocomplete prepend-icon="fas fa-map" :items="customerTypes" :filter="customFilter" color="cyan" item-text="name" label=" شهر مشتری "></v-autocomplete>
</v-card-text>
</v-flex>
<v-flex lg2>
<v-card-text>
<v-autocomplete prepend-icon="fas fa-align-right" :items="customerTypes" :filter="customFilter" color="cyan" item-text="name" label=" منطقه ی مشتری "></v-autocomplete>
</v-card-text>
</v-flex>
<v-flex lg2>
<v-card-text>
<v-text-field label=" آی دی تلگرام " color="cyan" prepend-icon="fas fa-telegram-plane"></v-text-field>
</v-card-text>
</v-flex>
<v-flex lg2>
<v-card-text>
<v-text-field label=" آدرس پیج اینستاگرام " color="cyan" prepend-icon="fas fa-instagram"></v-text-field>
</v-card-text>
</v-flex>
<v-flex lg8 style="position:relative; padding: 0px 15px;">
<v-card-text class="Duplicate">
<v-layout row wrap pl-2>
<v-flex lg8>
<v-text-field label=" آدرس " color="cyan" prepend-icon="fas fa-map-marker"></v-text-field>
</v-flex>
<v-flex lg4>
<v-text-field label=" شماره ی ثابت " color="cyan" prepend-icon="fas fa-phone"></v-text-field>
</v-flex>
<v-btn fab color="cyan" fixed bottom left dark style="left:15px; bottom:-25px; position:absolute"><v-icon dark>fas fa-plus</v-icon></v-btn>
<v-btn fab small color="red" fixed bottom left dark style="left:-5px; top:-20px; position:absolute"><v-icon dark>fas fa-times</v-icon></v-btn>
</v-layout>
</v-card-text>
</v-flex>
<v-flex lg4 style="position:relative; padding: 0px 20px;">
<v-card-text class="Duplicate">
<v-layout row wrap pl-2>
<v-flex lg6>
<v-text-field label=" نام شماره " color="cyan" prepend-icon="fas fa-tag"></v-text-field>
</v-flex>
<v-flex lg6>
<v-text-field label=" شماره ی تلفن " color="cyan" prepend-icon="fas fa-phone"></v-text-field>
</v-flex>
<v-btn fab color="cyan" fixed bottom left dark style="left:15px; bottom:-25px; position:absolute"><v-icon dark>fas fa-plus</v-icon></v-btn>
<v-btn fab small color="red" fixed bottom left dark style="left:-5px; top:-20px; position:absolute"><v-icon dark>fas fa-times</v-icon></v-btn>
</v-layout>
</v-card-text>
</v-flex>
</v-layout>
<v-layout row wrap>
<v-flex mt-3 class="lg12 RTL text-lg-left">
<hr>
<v-btn large round color="cyan" dark> <v-icon dark>fas fa-plus</v-icon> افزودن کاربر </v-btn>
</v-flex>
</v-layout>
</div>
<!-- --------------------------------------------------------------------
Modals :: BEGIN
-------------------------------------------------------------------- -->
<template>
<div class="text-xs-center">
<wm-user-departments-edit></wm-user-departments-edit>
</div>
</template>
<!-- --------------------------------------------------------------------
Modals :: END
-------------------------------------------------------------------- -->
</v-container>
</template>
<script>
import DepartmentEdit from "@User/components/Config/Department/Modal-Layout.vue";
export default {
components: {
'wm-user-departments-edit' : DepartmentEdit,
},
data () {
return {
passwordShow: false,
passwordRetypeShow: false,
password: '',
passwordRetype: '',
rules: {
required: value => !!value || 'اجباری',
min: v => v.length >= 8 || ' کلمه ی عبور باید حداقل 8 حرف باشد ',
emailMatch: () => ('The email and password you entered don\'t match')
},
hasSaved: false,
model: null,
categories: [
{ name: ' تلفن همراه ', abbr: 'FL', id: 1 },
{ name: ' تبلت ', abbr: 'GA', id: 2 },
{ name: ' لپ تاپ ', abbr: 'NE', id: 3 },
{ name: ' کامپیوتر ', abbr: 'CA', id: 4 },
{ name: ' دوربین ', abbr: 'NY', id: 5 }
],
customerTypes: [
{ name: ' حقیقی ', abbr: 'FL', id: 1 },
{ name: ' حقوقی ', abbr: 'GA', id: 2 },
],
breadcrumbItems: [
{
text: ' کاربران من ',
disabled: false,
routeName: 'UserList'
},
{
text: ' افزودن کاربر جدید ',
disabled: true,
routeName: 'AddUser'
}
]
}
},
};
</script>
<style scoped lang="scss">
.v-card__text {
padding-top: 4px;
}
.v-btn--round i {
margin-left: 10px;
margin-top: -4px;
}
</style>

@ -1,87 +0,0 @@
<template>
<v-container fluid>
<div class="Tile Shadowed Padd-0 WM-Margin-B-10" >
<wm-breadcrumbs LinkClass="WM-Link-Cyan" :items="breadcrumbItems"></wm-breadcrumbs>
</div>
<div class="Tile Shadowed">
<WM-PartTitle class="WM-Margin-T-20" TitleFa=" کاربران مجموعه ی من " TitleEn=" My Users " color="cyan"></WM-PartTitle>
<wm-user-filter></wm-user-filter>
<wm-user-items></wm-user-items>
<router-link :to="{name: 'AddUser'}">
<v-btn large fab color="cyan" fixed bottom left dark style="left:5%"><v-icon dark>fas fa-plus</v-icon></v-btn>
</router-link>
</div>
<!-- --------------------------------------------------------------------
Modals :: BEGIN
-------------------------------------------------------------------- -->
<template>
<div class="text-xs-center">
<wm-user-details></wm-user-details>
<wm-user-roles></wm-user-roles>
<wm-add-role></wm-add-role>
<wm-task-add></wm-task-add>
<wm-task-timeline></wm-task-timeline>
<wm-send-email></wm-send-email>
<wm-send-sms></wm-send-sms>
</div>
</template>
<!-- --------------------------------------------------------------------
Modals :: END
-------------------------------------------------------------------- -->
</v-container>
</template>
<script>
import UserItems from '@User/components/Items';
import UserFilters from '@User/components/Filters';
import UserDetails from "@User/components/Details.vue";
import UserRoles from "@User/components/Role/List.vue";
import AddRole from "@User/components/Role/Add.vue";
import TaskAdd from "@Common/components/Task/Add.vue";
import TaskTimeline from "@Common/components/Task/Timeline/Modal-Layout.vue";
import TaskTimelineItem from "@Common/components/Task/Timeline/Item.vue";
import SendEmailModal from "@Common/components/Contact/Email/Send.vue";
import SendSMSModal from "@Common/components/Contact/SMS/Send.vue";
export default {
components: {
'wm-user-items' : UserItems,
'wm-user-filter' : UserFilters,
'wm-user-details' : UserDetails,
'wm-user-roles' : UserRoles,
'wm-add-role' : AddRole,
'wm-task-add' : TaskAdd,
'wm-task-timeline' : TaskTimeline,
'wm-send-email' : SendEmailModal,
'wm-send-sms' : SendSMSModal,
},
data: function () {
return {
breadcrumbItems: [
// {
// text: '',
// disabled: false,
// href: '/CRM/Home',
// icon: 'home'
// },
{
text: ' کاربران من ',
disabled: true,
routeName: 'UserList'
},
]
}
}
};
</script>
<style scoped lang="scss">
</style>

@ -1,129 +0,0 @@
<!doctype html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="https://use.fontawesome.com/releases/v5.0.13/css/all.css" rel="stylesheet">
{{-- <link href="{{ asset('css/styles.css') }}" rel="stylesheet"> --}}
<title> New Design </title>
<!-- Styles -->
</head>
<body>
<div id='cursor'></div>
{{-- <div class="Loader">
<div class="W">W</div>
<div class="I">I</div>
<div class="L">L</div>
<div class="L">L</div>
<div class="A">A</div>
<div class="E">E</div>
<div class="N">N</div>
<div class="G">G</div>
<div class="I">I</div>
<div class="N">N</div>
<div class="E">E</div>
</div> --}}
<div id="app"></div>
</body>
<style lang="scss">
#app {
background-color: transparent;
}
.backgrounds {
width: 100%;
height:100%;
}
.c-hamburger {
opacity: 1;
}
</style>
<script>
(function () {
"use strict";
var w = window;
const b = document.getElementsByTagName("body")[0];
b.addEventListener("mousemove", mouseMove);
var cursor = document.getElementById('cursor');
b.addEventListener("mousedown", cursorClick);
b.addEventListener("mouseup", cursorUnclick);
var panel = document.querySelectorAll(".section.active");
var text = document.querySelectorAll(".section-tagline-wrapper");
var img = document.querySelectorAll(".section-img-wrapper");
var no = document.querySelectorAll(".section-no-wrapper");
var cImg = document.querySelectorAll('.pattern');
var patterns = document.querySelectorAll('.pattern');
function mouseMove(e) {
// Custom Cursor
cursor.style.left = e.clientX + 'px';
cursor.style.top = e.clientY + 'px';
// if (menu.classList.contains('active')) {
// return
// }
};
function clipMask(pattern, e) {
pattern.style.setProperty("--clip-position", e.clientX + 'px ' + e.clientY + 'px');
}
function cursorClick(e) {
cursor.classList.add("clicked")
}
function cursorUnclick(e) {
setTimeout(function () {
cursor.classList.remove("clicked")
}, 300);
}
function cursorHover(e) {
cursor.classList.add("hover")
}
function cursorUnhover(e) {
cursor.classList.remove("hover")
}
var hovers = document.querySelectorAll(".hover-target");
for (var i = hovers.length - 1; i >= 0; i--) {
var hover = hovers[i];
hoverHandler(hover);
};
function hoverHandler(hover) {
hover.addEventListener("mouseover", cursorHover);
hover.addEventListener("mouseout", cursorUnhover);
}
})();
</script>
{{-- <script type="text/javascript" src="{{ asset('js/vendors.js') }}"></script>
<script type="text/javascript" src="{{ asset('js/scripts.js') }}"></script> --}}
<script src="{{ mix('js/vue/Authentication/app.js') }}"></script>
</html>

@ -1,17 +0,0 @@
<!doctype html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="https://use.fontawesome.com/releases/v5.0.13/css/all.css" rel="stylesheet">
<title> Welcome </title>
<!-- Styles -->
</head>
<body>
<div id="app"></div>
</body>
<script src="{{ mix('js/vue/User/app.js') }}"></script>
</html>

@ -22,12 +22,7 @@ Route::get('/WebsiteManagement/{any?}', function () {
return view('WebsiteManagement'); return view('WebsiteManagement');
}); });
Route::get( '/User/{any?}', function () {
return view('User');
});
Route::get( '/Login', function () {
return view( 'Authentication');
});
Route::get('/{any?}', function () { Route::get('/{any?}', function () {
return redirect('/Main/Home'); return redirect('/Main/Home');
}); });

15
webpack.mix.js vendored

@ -16,9 +16,6 @@ mix.webpackConfig({
alias: { alias: {
'@JS': path.resolve(__dirname, 'resources/js'), '@JS': path.resolve(__dirname, 'resources/js'),
'@Global': path.resolve(__dirname, 'resources/js/Global'), '@Global': path.resolve(__dirname, 'resources/js/Global'),
// '@Modules': path.resolve(__dirname, 'resources/js/Modules'),
// -----------------------------Modules--------------------------------
'@User': path.resolve(__dirname, 'resources/js/User'),
}, },
}, },
output: { output: {
@ -26,21 +23,15 @@ mix.webpackConfig({
}, },
}); });
// mix.js('resources/js/Modules/Website/app.js', 'public/Modules/Website/js')
// .js('resources/js/Home/app.js', 'public/Home/js');
// .js('resources/js/Authentication/app.js', 'public/Authentication/js');
mix.js('resources/js/Authentication/app.js', 'public/js/vue/Authentication') mix.js('resources/js/Home/app.js', 'public/js/vue/Home');
.js('resources/js/Home/app.js', 'public/js/vue/Home')
.js('resources/js/User/app.js', 'public/js/vue/User');
// require('./modules/wm-core/webpack.mix'); require('./modules/wm-core/webpack.mix');
require('./modules/wm-common/webpack.mix'); require('./modules/wm-common/webpack.mix');
require('./modules/wm-crm/webpack.mix'); require('./modules/wm-crm/webpack.mix');
// require('./modules/wm-store/webpack.mix');
require('./modules/wm-reservation/webpack.mix'); // require('./modules/wm-reservation/webpack.mix');
mix.version(); mix.version();
Loading…
Cancel
Save