PHP Classes

File: resources/js/Pages/Import.vue

Recommend this page to a friend!
  Classes of Robert Devenyi   Iceburg CRM   resources/js/Pages/Import.vue   Download  
File: resources/js/Pages/Import.vue
Role: Auxiliary data
Content type: text/plain
Description: Auxiliary data
Class: Iceburg CRM
CRM application to manage contacts
Author: By
Last change:
Date: 1 year ago
Size: 5,562 bytes
 

Contents

Class file image Download
<template> <Head title="Settings" /> <BreezeAuthenticatedLayout> <template #header> <h2 class="font-semibold text-xl text-gray-800 leading-tight"> Import </h2> </template> <BreadCrumbs :levels="$page.props.breadcrumbs" /> <div class="w-full mt-10 bg-base-200"> <div class="max-w-full sm:px-3 lg:px-4 p-10"> <Alert :message="data.alert_text" :is_successful="data.success_alert" :is_error="data.error_alert" /> <div class="grid row-auto"> <div class="p-5 grid grid-row-2 bg-base-100 text-base-content"> <div class="grid h-20 w-full card bg-base-300 rounded-box place-items-center"> <label for="search" class="block text-sm font-medium leading-5 select-secondary"> Select a File </label> <input class="input file input-secondary rounded" type="file" id="file-input" @change="onFileChanged($event)" name="file" /> </div> </div> <div class="p-5 grid grid-row-2 bg-base-100"> <label for="search" class="block text-sm font-medium leading-5 text-gray-700"> Select Module </label> <select required v-model="data.module_id" name="module_id" class="input select-secondary rounded"> <option :value="item.id" v-for="item in $page.props.modules">{{item.label}}</option> </select> </div> <div class="p-5 grid grid-row-2 bg-base-100"> <label for="search" class="block text-sm font-medium leading-5 text-base-content"> Use First Row as Column Names </label> <input v-model="data.first_row_header" type="checkbox" class="checkbox checkbox-secondary rounded"> </div> <Preview v-if="preview_data.show" :fields="preview_data.fields" :row="preview_data.row" /> <div class="p-5 bg-base-100"> <input v-if="preview_data.show === false && data.module_id !== null" @click.prevent="upload()" type="submit" class="btn btn-secondary" name="import" value="Preview" /> <input v-if="preview_data.show" @click.prevent="process()" type="submit" class="btn btn-secondary" name="import" value="Import" /> </div> </div> </div> </div> </BreezeAuthenticatedLayout> </template> <script setup> import { ref, reactive } from "vue"; import BreezeAuthenticatedLayout from '@/Layouts/Authenticated.vue'; import { Head, usePage } from '@inertiajs/inertia-vue3'; import axios from "axios"; import BreadCrumbs from "@/Components/BreadCrumbs"; import Preview from "@/Components/Import/Preview"; import Alert from "@/Components/Alert"; const file = ref(); const form = ref(); const data = reactive({ module_name: usePage().props.value.data.module_name, module_id: usePage().props.value.data.module_id, success_alert: ref(''), error_alert: ref(''), alert_text: ref(''), first_row_header: usePage().props.value.data.first_row_header, preview: ref(true) }); const preview_data = reactive({ fields: {}, row: {}, show: ref(false) }) const onFileChanged = function($event) { preview_data.show=false; const target = $event.target; if (target && target.files) { file.value = target.files[0]; } } const process = function(){ data.preview=false; upload(); } async function upload() { if (file.value) { data.alert_text= ''; data.success_alert=false; data.error_alert=false; const formData = new FormData(); formData.append('input_file', file.value); formData.append('module_id', data.module_id); formData.append('module_name', data.module_name); formData.append('preview', data.preview); formData.append('first_row_header', data.first_row_header); const headers = { 'Content-Type': 'multipart/form-data'}; axios.post('/data/import', formData, {headers}).then((res) => { if(data.preview === false) { data.alert_text="Records have been imported"; window.scrollTo(0, 'top'); data.success_alert=true; data.preview=false; setTimeout(() => { window.location='/import?success=1&records='; }, 2000); } else { preview_data.fields=res.data.fields; preview_data.row=res.data.row; preview_data.show=true; data.preview=true; } }).catch(function (error) { data.alert_text="There was an error with your import. Please try again."; data.error_alert=true; setTimeout(() => { data.error_alert=null; data.alert_text=''; }, 50000)}); } }; </script>