Your IP : 216.73.217.77


Current Path : /home/users/unlimited/www/egrocer.codeskitter.site/resources/js/containers/
Upload File :
Current File : /home/users/unlimited/www/egrocer.codeskitter.site/resources/js/containers/TheContainer.vue

<template>
    <div id="app">
        <div id="sidebar" class="active">
            <div class="sidebar-wrapper active">
                <div class="sidebar-header">

                    <div class="d-flex flex-row justify-content-center">
                        <div class="logo">
                            <router-link to="/" class="d-flex flex-column align-items-center justify-content-center align-content-center flex-wrap ">
                                <img class="container-logo" v-if="$appLogo != ''" :src="$storageUrl+$appLogo" alt='Logo' srcset=""/>
                                <img class="container-logo" v-else :src="$baseUrl + '/images/logo.png'" alt='Logo' srcset=""/>
                           
                            </router-link>
                        </div>
                        <div class="toggler">
                            <a href="javascript:void(0)" class="sidebar-hide d-xl-none d-block"><i class="bi bi-x bi-middle"></i></a>
                        </div>
                    </div>
                </div>
                <div class="sidebar-menu">
                    <ul class="menu">

                        <li class="sidebar-item sidebar-search">
                            <b-form-input v-model="search" type="search" :placeholder="__('search')"
                                          v-on:keyup="filterItem" v-on:search="filterItem"></b-form-input>
                        </li>

                       
                        <template v-for="item in filteredSidebarItems">
                            <li class="sidebar-item" :class="{ 'active' : isActive(item.url) || subIsActive(item), 'has-sub' : isHasSub(item) }"
                                v-if=" item.role==true ? ($role('Super Admin') && (item.name=='Role' || item.name=='System Users')) : (item.permission && $can(item.permission) )">
                                
                                <template v-if="isHasSub(item)">
                                    <a class="sidebar-link">
                                        <i :class="`fa fa-${item.icon}`"></i>
                                        <span>{{ item.name }}</span>
                                    </a>
                                    <ul class="submenu" :class="{ 'active' : subIsActive(item) } ">
                                        <template v-for="sub in item.submenu">
                                            <li class="submenu-item" :class="{ 'active' : isActive(sub.url) } " :key="sub.key"
                                             v-if="sub.role ? $role('Super Admin') && (item.name === 'Role' || item.name === 'System Users') : sub.permission && $can(sub.permission)">
                                                <router-link :to="sub.url" @click="closeSideBarMenu()">
                                                    {{ sub.name }}
                                                </router-link>
                                            </li>
                                        </template>
                                        
                                        
                                    </ul>
                                </template>
                                
                                <template v-else>
                                    <router-link class="sidebar-link" :to="item.url" @click="closeSideBarMenu()">
                                        <i :class="`fa fa-${item.icon}`"></i>
                                        <span>{{ item.name }}</span>
                                    </router-link>
                                </template>

                            </li>
                        </template>
                        <template v-for="item in filteredDatabaseDownloadBtn">
                            <div v-if=" item.role==true ? ($role('Super Admin') && (item.name=='Role' || item.name=='System Users')) : (item.permission && $can(item.permission) )">
                                <button class="btn btn-primary" @click="downloadDatabase"><i :class="`fa fa-download`"></i><b-spinner v-if="isLoading" small label="Spinning"></b-spinner> Download Database</button>
                            </div>
                        </template>
                    </ul>
                </div>
                <button class="sidebar-toggler btn x"><i data-feather="x"></i></button>
            </div>
        </div>
        <vertical-header></vertical-header>
        <div id="main">
            <div style="min-height: 700px;">
                <router-view></router-view>
            </div>
            <the-footer></the-footer>
        </div>
    </div>
</template>
<script>
import TheSidebar from './TheSidebar'
import TheFooter from './TheFooter'
import VerticalHeader from './VerticalHeader'
import Auth from "../Auth";
import axios from "axios";

export default {
    name: 'TheContainer',
    components: {
        TheSidebar,
        TheFooter,
        VerticalHeader
    },
    created() {
        // this.updateCurrency(window.localStorage.getItem('currency'));
        this.closeSideBarMenu();
        this.checkPermissions();
    },
    watch: {
        '$route': 'checkPermissions'
    },
    mounted() {
        //lang
        if(window.localStorage.getItem('lang')){
            this.lang = window.localStorage.getItem('lang');
            console.log(this.lang);
        }

        function slideToggle(t,e,o){0===t.clientHeight?j(t,e,o,!0):j(t,e,o)}function slideUp(t,e,o){j(t,e,o)}function slideDown(t,e,o){j(t,e,o,!0)}function j(t,e,o,i){void 0===e&&(e=400),void 0===i&&(i=!1),t.style.overflow="hidden",i&&(t.style.display="block");var p,l=window.getComputedStyle(t),n=parseFloat(l.getPropertyValue("height")),a=parseFloat(l.getPropertyValue("padding-top")),s=parseFloat(l.getPropertyValue("padding-bottom")),r=parseFloat(l.getPropertyValue("margin-top")),d=parseFloat(l.getPropertyValue("margin-bottom")),g=n/e,y=a/e,m=s/e,u=r/e,h=d/e;window.requestAnimationFrame(function l(x){void 0===p&&(p=x);var f=x-p;i?(t.style.height=g*f+"px",t.style.paddingTop=y*f+"px",t.style.paddingBottom=m*f+"px",t.style.marginTop=u*f+"px",t.style.marginBottom=h*f+"px"):(t.style.height=n-g*f+"px",t.style.paddingTop=a-y*f+"px",t.style.paddingBottom=s-m*f+"px",t.style.marginTop=r-u*f+"px",t.style.marginBottom=d-h*f+"px"),f>=e?(t.style.height="",t.style.paddingTop="",t.style.paddingBottom="",t.style.marginTop="",t.style.marginBottom="",t.style.overflow="",i||(t.style.display="none"),"function"==typeof o&&o()):window.requestAnimationFrame(l)})}
        let sidebarItems = document.querySelectorAll('.sidebar-item.has-sub');
        for(var i = 0; i < sidebarItems.length; i++) {
            let sidebarItem = sidebarItems[i];
            sidebarItems[i].querySelector('.sidebar-link').addEventListener('click', function(e) {
                e.preventDefault();

                let submenu = sidebarItem.querySelector('.submenu');
                if( submenu?.classList?.contains('active') ) submenu.style.display = "block"
                if( submenu.style.display == "none" ) submenu?.classList?.add('active')
                else submenu?.classList?.remove('active')
                slideToggle(submenu, 300)
            })
        }
        window.addEventListener('DOMContentLoaded', (event) => {
            var w = window.innerWidth;
            if(w < 1200) {
                document.getElementById('sidebar')?.classList?.remove('active');
            }
        });
        window.addEventListener('resize', (event) => {
            var w = window.innerWidth;
            if(w < 1200) {
                document.getElementById('sidebar')?.classList?.remove('active');
            }else{
                document.getElementById('sidebar')?.classList?.add('active');
            }
        });
        document.querySelector('.burger-btn').addEventListener('click', () => {
            document.getElementById('sidebar')?.classList?.toggle('active');
        })
        document.querySelector('.sidebar-hide').addEventListener('click', () => {
            document.getElementById('sidebar')?.classList?.toggle('active');
        })
        // Perfect Scrollbar Init
        if(typeof PerfectScrollbar.default == 'function') {
            const container = document.querySelector(".sidebar-wrapper");
            const ps = new PerfectScrollbar.default(container, {
                wheelPropagation: false
            });
        }

        // Scroll into active sidebar
        if(document.querySelector('.sidebar-item.active')){
            document.querySelector('.sidebar-item.active').scrollIntoView(false)
        }


    },
    data: function() {
        return {
           lang: 'en',
            search: '',
            isLoading: false,
            suspecious: null,
            sidebarItems :[
                {
                    name: __('dashboard'),
                    icon : 'tachometer-alt',
                    url:'/dashboard',
                    permission:'manage_dashboard'
                },
                {
                    name: __('orders'),
                    icon :'shopping-cart',
                    url:'/orders',
                    permission:'order_list'
                },
                {
                    name: __('categories'),
                    icon : 'bullseye',
                    permission:'category_list', 
                    submenu:[
                        {
                            name: __('add_category'),
                            icon : 'grid-fill',
                            url:'/manage_categories/create',
                             permission:'category_create', 
                        },
                        {
                            name: __('manage_categories'),
                            icon : 'grid-fill',
                            url:'/manage_categories',
                             permission:'category_list', 
                        },
                        {
                            name: __('order_categories'),
                            icon : 'grid-fill',
                            url:'/categories_order',
                            permission:'manage_categories_order', 
                        },
                    ]
                },
                {
                    name: __('products'),
                    icon : 'cubes',
                    permission:'product_list',
                    submenu:[
                        {
                            name: __('add_product'),
                            icon : 'grid-fill',
                            url:'/manage_products/create',
                            permission:'product_create',
                        },
                        {
                            name: __('manage_products'),
                            icon : 'grid-fill',
                            url:'/manage_products',
                            permission:'product_list',
                        },
                        {
                            name: __('approve_requests'),
                            icon : 'grid-fill',
                            url:'/approve_requests',
                            permission:'product_list',
                        },
                        {
                            name: __('units'),
                            icon : 'grid-fill',
                            url:'/units',
                            permission:'manage_units',
                        },
                        {
                            name: __('product_ratings'),
                            icon : 'grid-fill',
                            url:'/product_ratings',
                            permission:'product_list',
                        },
                        {
                            name: __('media'),
                            icon : 'grid-fill',
                            url:'/media',
                            permission:'manage_media',
                        },
                        {
                            name: __('bulk_upload'),
                            icon : 'grid-fill',
                            url:'/bulk_upload',
                            permission:'manage_product_bulk_upload',
                        },
                        {
                            name: __('bulk_update'),
                            icon : 'grid-fill',
                            url:'/bulk_update',
                            permission:'manage_product_bulk_upload',
                        },
                        {
                            name: __('taxes'),
                            icon : 'grid-fill',
                            url:'/taxes',
                            permission:'product_list',
                        },
                        {
                            name: __('brands'),
                            icon : 'grid-fill',
                            url:'/brands',
                            permission:'product_list',
                        },
                        {
                            name: __('product_order'),
                            icon : 'grid-fill',
                            url:'/product_order',
                            permission:'manage_product_order',
                        },
                    ]
                },
                {
                    name: __('stock_management'),
                    icon : 'cubes',
                    url:'/manage_stock',
                    permission:'product_list',
                },
                {
                    name: __('sellers'),
                    icon: 'male',
                    permission:'seller_list',
                    submenu: [
                        {
                            name: __('add_seller'),
                            icon : 'grid-fill',
                            url:'/sellers/create',
                            permission:'seller_create',
                        },
                        {
                            name: __('seller_requests'),
                            icon : 'grid-fill',
                            url:'/registered_sellers',
                            permission:'seller_list',
                        },
                        {
                            name: __('manage_sellers'),
                            icon : 'grid-fill',
                            url:'/sellers',
                            permission:'seller_list',
                        },
                        // {
                        //     name: __('seller_commissions'),
                        //     icon : 'grid-fill',
                        //     url:'/seller_commissions',
                        //     permission:'seller_list',
                        // },
                        {
                            name: __('seller_wallet_transactions'),
                            icon : 'grid-fill',
                            url:'/seller_wallet_transactions',
                            permission:'seller_list',
                        },
                        {
                            name: __('policies_seller'),
                            icon : 'grid-fill',
                            url:'/privacy_policy_seller',
                            permission:'manage_privacy_policy_seller_app',
                        },
                    ],
                },
                {
                    name: __('home_sliders'),
                    icon : 'picture-o',
                    permission:'home_slider_image_list',
                    submenu: [
                        {
                            name: __('add_home_slider'),
                            icon : 'grid-fill',
                            url:'/home_sliders/create',
                            permission:'home_slider_image_create',
                        },
                        {
                            name: __('manager_home_sliders'),
                            icon : 'grid-fill',
                            url:'/home_sliders',
                            permission:'home_slider_image_list',
                        }
                    ]
                },
                {
                    name: __('offer_image'),
                    icon : 'gift',
                    permission:'new_offer_image_list',
                    submenu: [
                        {
                            name: __('add_offer_image'),
                            icon : 'grid-fill',
                            url:'/offers/create',
                            permission:'new_offer_image_create',
                        },
                        {
                            name: __('manage_offer_images'),
                            icon : 'grid-fill',
                            url:'/offers',
                            permission:'new_offer_image_list',
                        },
                        {
                            name: __('manage_popup_offer'),
                            icon : 'grid-fill',
                            url:'/popup',
                            permission:'new_offer_image_list',
                        }
                    ]
                },

                {
                    name: __('promo_code'),
                    icon : 'gift',
                    permission:'promo_code_list',
                    submenu: [
                        {
                            name: __('add_promo_code'),
                            icon : 'grid-fill',
                            url:'/promo_code/create',
                            permission:'promo_code_create',
                        },
                        {
                            name: __('manage_promo_code'),
                            icon : 'grid-fill',
                            url:'/promo_code',
                            permission:'promo_code_list',
                        }
                    ]

                },

                {
                    name: __('featured_sections'),
                    icon : 'puzzle-piece',
                    permission:'featured_section_list',
                    submenu: [
                        {
                            name: __('add_section'),
                            icon : 'grid-fill',
                            url:'/sections/create',
                            permission:'featured_section_create',
                        },
                        {
                            name: __('manage_section'),
                            icon : 'grid-fill',
                            url:'/sections',
                            permission:'featured_section_list',
                        },
                        // {
                        //     name: __('order_section'),
                        //     icon : 'grid-fill',
                        //     url:'/section_order',
                        //     permission:'featured_section_create',
                        // },
                    ]

                },

                {
                    name: __('return_requests'),
                    icon : 'retweet',
                    url:'/return_requests',
                    permission:'return_request_list',
                },
                {
                    name: __('withdrawal_requests'),
                    icon : 'credit-card',
                    url:'/withdrawal_requests',
                    permission:'withdrawal_request_list',
                },
                {
                    name: __('delivery_boys'),
                    icon : 'male',
                    permission:'delivery_boy_list',
                    submenu: [
                        {
                            name: __('add_delivery_boy'),
                            icon : 'grid-fill',
                            url:'/delivery_boys/create',
                            permission:'delivery_boy_create',
                        },
                        {
                            name: __('dlivery_boy_requests'),
                            icon : 'grid-fill',
                            url:'/registered_delivery_boys',
                            permission:'delivery_boy_list',
                        },
                        {
                            name: __('manage_delivery_boys'),
                            icon : 'grid-fill',
                            url:'/delivery_boys',
                            permission:'delivery_boy_list',
                        },
                        {
                            name: __('fund_transfers'),
                            icon : 'grid-fill',
                            url:'/fund_transfers',
                            permission:'fund_transfers_list',
                        },
                        {
                            name: __('delivery_boy_cash'),
                            icon : 'grid-fill',
                            url:'/cash_collection',
                            permission:'cash_collection_list',
                        },
                        {
                            name: __('delivery_boy_policies'),
                            icon : 'grid-fill',
                            url:'/privacy_policy_delivery_boy',
                            permission:'manage_privacy_policy_delivery_boy',
                        },
                    ]
                },
                {
                    name: __('notifications'),
                    icon : 'share-square',
                    url:'/notifications',
                    permission:'notification_list',
                    submenu: [
                        {
                            name: __('send_notifications'),
                            icon : 'grid-fill',
                            url:'/notifications/create',
                            permission:'notification_create',
                        },{
                            name: __('manage_notifications'),
                            icon : 'grid-fill',
                            url:'/notifications',
                            permission:'notification_list',
                        }
                    ]
                },
                 {
                    name: __('email'),
                    icon : 'share-square',
                    url:'/emails',
                    permission:'notification_list',
                    submenu: [
                        {
                            name: __('email_templates'),
                            icon : 'grid-fill',
                            url:'/email_templates',
                            permission:'notification_create',
                        },{
                            name: __('manage_emails'),
                            icon : 'grid-fill',
                            url:'/emails',
                            permission:'notification_list',
                        }
                    ]
                },

                {
                    name: __('system'),
                    icon: 'wrench',
                    permission:'manage_time_slots',
                    submenu: [
                        {
                            name: __('store_settings'),
                            icon : 'grid-fill',
                            url:'/store_settings',
                            permission:'manage_store_settings',
                        },
                        {
                            name: __('delivery_settings'),
                            icon : 'grid-fill',
                            url:'/delivery_settings',
                            permission:'manage_time_slots',
                        },
                        {
                            name: __('payment_methods'),
                            icon : 'grid-fill',
                            url:'/payment_methods',
                            permission:'manage_payment_methods',
                        },
                        {
                            name: __('contact_us'),
                            icon : 'grid-fill',
                            url:'/contact_us',
                            permission:'manage_contact_us',
                        },
                        {
                            name: __('about_us'),
                            icon : 'grid-fill',
                            url:'/about_us',
                            permission:'manage_about_us',
                        },
                       
                        {
                            name: __('firebase_settings'),
                            icon : 'grid-fill',
                            url:'/firebase-settings',
                            permission:'manage_store_settings',
                        },
                        {
                            name: __('sms_settings'),
                            icon : 'grid-fill',
                            url:'/sms-settings',
                            permission:'manage_store_settings',
                        },
                        {
                            name: __('sms_templates'),
                            icon : 'grid-fill',
                            url:'/sms-templates',
                            permission:'manage_store_settings',
                        },
                        {
                            name: __('system_registration'),
                            icon : 'grid-fill',
                            url:'/purchase_code',
                            permission:'manage_system_registration',
                        },
                        {
                            name: __('system_updater'),
                            icon : 'grid-fill',
                            url:'/system_updater',
                            permission:'manage_store_settings',
                        },

                    ],
                },



                {
                    name: __('web_settings'),
                    // icon : 'gear fa-spin',
                    icon : 'gear',
                    permission:'general_settings',
                    submenu: [
                        {
                            name:  __('general_web_settings'),
                            icon : 'grid-fill',
                            url:'/general_settings',
                            permission:'general_settings',
                        },
                        {
                            name: __('social_media'),
                            icon : 'grid-fill',
                            url:'/social_media',
                            permission:'manage_social_media_list',
                        },
                       
                    ]
                },

                {
                    name:__('languages'),
                    icon: 'language',
                    permission:'city_list',
                    submenu: [
                        {
                            name: __('add_language'),
                            icon: 'grid-fill',
                            url: '/languages/create',
                            permission:'manage_dashboard',
                        },
                        {
                            name: __('manage_languages'),
                            icon: 'grid-fill',
                            url: '/languages',
                            permission:'manage_dashboard',
                        }
                    ]
                },

                {
                    name:__('countries'),
                    icon: 'globe-asia',
                    permission:'city_list',
                    submenu: [
                        {
                            name: __('add_country'),
                            icon: 'grid-fill',
                            url: '/countries/create',
                            permission:'manage_dashboard',
                        },
                        {
                            name: __('manage_countries'),
                            icon: 'grid-fill',
                            url: '/countries',
                            permission:'manage_dashboard',
                        }
                    ]
                },

                {
                    name: __('location'),
                    icon : 'map',
                    permission:'city_list',
                    submenu: [
                        {
                            name: __('add_city'),
                            icon: 'grid-fill',
                            url: '/cities/create',
                            permission:'manage_dashboard',
                        },

                        {
                            name: __('manage_cities'),
                            icon: 'grid-fill',
                            url: '/cities',
                            permission:'manage_dashboard',
                        }
                        // ,{
                        //     name: __('deliverable_area'),
                        //     icon: 'grid-fill',
                        //     url: '/deliverable_area',
                        //     permission:'manage_dashboard',
                        // }
                    ]
                },
                {
                    name: __('customers'),
                    icon : 'male',
                    permission:'customer_list',
                    submenu: [
                        {
                            name: __('customers'),
                            icon : 'grid-fill',
                            url:'/users',
                            permission:'customer_list',
                        },
                        {
                            name: __('wishlists'),
                            icon : 'grid-fill',
                            url:'/wishlists',
                            permission:'manage_wishlists',
                        },
                        {
                            name: __('wallet_transactions'),
                            icon : 'grid-fill',
                            url:'/wallet_transactions',
                            permission:'transaction_list',
                        },
                        {
                            name: __('transactions'),
                            icon : 'grid-fill',
                            url:'/transactions',
                            permission:'transaction_list',
                        },
                        {
                            name: __('customer_policies'),
                            icon : 'grid-fill',
                            url:'/privacy_policy',
                            permission:'manage_privacy_policy',
                        },
                    
                    ]
                },
                
                {
                    name: __('reports'),
                    icon : 'folder-open',
                    permission:'product_sales_reports', 
                    submenu: [
                        {
                            name: __('product_sales_report'),
                            icon: 'grid-fill',
                            url: '/product_sales_reports',
                            permission:'product_sales_reports',
                        },
                        {
                            name: __('sales_reports'),
                            icon: 'grid-fill',
                            url: '/sales_reports',
                            permission:'sales_reports',
                        }
                    ]
                },
                {
                    name: __('system_users'),
                    icon : 'users',
                    url:'/system_users',
                    role : true
                },
                {
                    name:__('role'),
                    icon : 'user-secret',
                    url:'/role',
                    role : true
                },
                {
                    name:__('faqs'),
                    icon : 'info',
                    url:'/faqs',
                    permission:'faq_list',
                },
            ],
            databasedownloadBtn :[
                {
                    name:__('database_backup'),
                    icon : 'info',
                    permission:'database_backup_download',
                   
                },
            ]

        }
    },
    computed: {
        filteredSidebarItems() {
            return this.sidebarItems;
        },
        filteredDatabaseDownloadBtn() {
            return this.databasedownloadBtn;
        }
    },
    methods: {

        filterItem(){

            var filter = this.search;
            $(`.sidebar-menu li:not(.sidebar-search)`).each(function (index, element) {
                const item = $(element);
                const parentListIsNested = item.closest('ul').hasClass('submenu');

                if (item.text().match(new RegExp(filter, 'gi'))) {
                    item.fadeIn();
                    if (parentListIsNested){
                        item.closest('ul').removeClass('active');
                    }
                } else {
                    item.fadeOut();
                    if (parentListIsNested){
                        item.closest('ul').addClass('active');
                    }
                }
            });
        },
        subIsActive(item) {
            const paths = Array.isArray(item.submenu) ? item.submenu : [];
            return paths.some(path => {
                return this.$route.path.indexOf(path.url) === 0;
            });
        },
        isActive(url) {
            if(this.$route.path == url){
                return true;
            }
            return false;
        },
        isHasSub(item){
            if(item.hasOwnProperty("submenu")){
                if(item.submenu.length > 0){
                    return true;
                }
            }
            return false;
        },
        checkPermissions() {
            var current_path = this.$route.path;
            var permission = '';

            this.sidebarItems.forEach(menu => {
                //Only Main Categories
                if(menu.submenu && menu.submenu.length>0) {
                    menu.submenu.forEach(submenu => {
                        if(submenu.url === current_path){
                            permission = submenu.permission;
                        }
                    });
                }else{
                    if(menu.url === current_path){
                        permission = menu.permission;
                    }
                }
            });

            if(Auth.check() && UserPermissions.length === 0){
                //this.$router.push({path:'/login'});
                if(window.localStorage.getItem('loginCheck') == 1){
                    Auth.logout();
                }
                window.localStorage.setItem('loginCheck',1);
                window.location.reload();
            }
            else if(Auth.check() && permission && !this.$can(permission)){
                this.$router.push({path:'/unauthorized'});
            }

        },

        closeSideBarMenu() {
            var w = window.innerWidth;
            if(w < 1200) {
                document.getElementById('sidebar')?.classList?.remove('active');
            }
        },
     
        downloadDatabase() {
            this.isLoading = true;

   axios({
        method: 'get',
        url:this.$apiUrl + '/database_backup_download',
        responseType: 'blob',  // important: responseType must be 'blob' for file download
      })
        .then((response) => {
          const blob = new Blob([response.data]);
          const link = document.createElement('a');
          link.href = window.URL.createObjectURL(blob);
          
          // Extracting the filename from the response headers
          const contentDisposition = response.headers['content-disposition'];
          const filenameMatch = contentDisposition && contentDisposition.match(/filename="(.+?)"/);
          const filename = filenameMatch ? filenameMatch[1] : 'downloaded-database-backup.sql';
          
          link.download = filename;
          link.click();
          this.showMessage("success", __('database_downloaded_successfully'));
       this.isLoading = false;
        })
        .catch((error) => {
          console.error('Error downloading file:', error);
          // Handle error accordingly
        });
        }
         

    }
}
</script>

<style scoped>
.fade-enter-active,
.fade-leave-active {
    transition: opacity 0.3s;
}
.fade-enter,
.fade-leave-to {
    opacity: 0;
}
</style>