bug fix in import commodities from excel

This commit is contained in:
Hesabix 2025-03-27 22:54:57 +00:00
parent 1c277f87bf
commit 3b36749b43

View file

@ -1,103 +1,149 @@
<script lang="ts"> <script lang="ts">
import axios from 'axios'; import { defineComponent, ref } from 'vue'
import Swal from 'sweetalert2'; import axios from 'axios'
import {defineComponent} from 'vue' import Swal from 'sweetalert2'
import {ref} from 'vue'
export default defineComponent({ export default defineComponent({
name: "commodity-import-excel", name: 'CommodityImportExcel',
props: { props: {
windowsState:Object windowsState: {
type: Object,
required: true
}
}, },
data:()=>{return{ setup(props, { emit }) {
loading:ref(false), const loading = ref(false)
file:null const file = ref<File | null>(null)
}}, const fileInput = ref<HTMLInputElement | null>(null)
methods:{ const dialog = ref(false)
addFile(e) {
this.file = e.target.files[0]; const addFile = (e: Event) => {
}, const target = e.target as HTMLInputElement
submit(){ if (target.files) {
if(this.file === null){ file.value = target.files[0]
Swal.fire({ }
}
const submit = async () => {
if (!file.value) {
await Swal.fire({
text: 'فایل انتخاب نشده است', text: 'فایل انتخاب نشده است',
icon: 'error', icon: 'error',
confirmButtonText: 'قبول' confirmButtonText: 'قبول'
}); })
return
} }
else{
//send excel file to server loading.value = true
let formData = new FormData(); const formData = new FormData()
formData.append('file', this.file); formData.append('file', file.value)
axios.post( '/api/commodity/import/excel',formData,
{ try {
await axios.post('/api/commodity/import/excel', formData, {
headers: { headers: {
'Content-Type': 'multipart/form-data' 'Content-Type': 'multipart/form-data'
} }
}).then(()=>{ })
Swal.fire({
const result = await Swal.fire({
text: 'فایل با موفقیت ثبت شد.', text: 'فایل با موفقیت ثبت شد.',
icon: 'success', icon: 'success',
confirmButtonText: 'قبول' confirmButtonText: 'قبول'
}).then((resp)=>{
this.$refs.Close.click();
this.$props.windowsState.submited = true;
});
}) })
.catch(()=>{
Swal.fire({ if (result.isConfirmed) {
props.windowsState.submited = true
dialog.value = false
file.value = null
if (fileInput.value) fileInput.value.value = ''
}
} catch (error) {
await Swal.fire({
text: 'متاسفانه خطایی به وجود آمد.', text: 'متاسفانه خطایی به وجود آمد.',
icon: 'error', icon: 'error',
confirmButtonText: 'قبول' confirmButtonText: 'قبول'
}); })
}); } finally {
loading.value = false
} }
} }
return {
loading,
file,
fileInput,
dialog,
addFile,
submit
}
} }
}) })
</script> </script>
<template> <template>
<v-tooltip :text="$t('dialog.import_excel')" location="bottom"> <div>
<template v-slot:activator="{ props }"> <v-tooltip bottom text="وارد کردن از اکسل">
<v-btn v-bind="props" icon="mdi-table-arrow-left" color="primary" data-bs-toggle="modal" <template #activator="{ props }">
data-bs-target="#importexcel"> <v-btn
</v-btn> v-bind="props"
icon="mdi-table-arrow-left"
color="primary"
@click="dialog = true"
/>
</template> </template>
</v-tooltip> </v-tooltip>
<!-- Modal -->
<div class="modal modal-lg fade" id="importexcel" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="importexcelLabel" aria-hidden="true"> <v-dialog v-model="dialog" max-width="600" persistent>
<div class="modal-dialog"> <v-toolbar title="درون ریزی از اکسل">
<div class="modal-content"> <v-spacer />
<div class="modal-header bg-primary-light text-white"> <v-btn icon="mdi-close" variant="text" color="gray" @click="dialog = false" />
<h1 class="modal-title fs-5" id="importexcelLabel">وارد کردن از اکسل</h1> </v-toolbar>
<div class="block-options"> <v-card rounded="0">
<button type="button" class="btn-close text-white" data-bs-dismiss="modal" aria-label="Close"></button> <v-card-text class="pt-4">
</div> <v-list>
</div> <v-list-item>
<div class="modal-body"> برای وارد کردن لیست کالا و خدمات در اکسل ابتدا فایل نمونه را دریافت نمایید سپس مطابق الگو اطلاعات را تکمیل کنید در مرحله بعدی با انتخاب فایل نسبت به ورود از لیست اقدام کنید
<ul> </v-list-item>
<li>برای وارد کردن لیست کالا و خدمات در اکسل ابتدا فایل نمونه را دریافت نمایید سپس مطابق الگو اطلاعات را تکمیل کنید در مرحله بعدی با انتخاب فایل نسبت به ورود از لیست اقدام کنید</li> <v-list-item>
<li> <a
<a :href="this.$filters.getApiUrl() + '/imports/commodities-import.xlsx'" target="_blank">دریافت فایل نمونه</a> :href="`${$filters.getApiUrl()}/imports/commodities-import.xlsx`"
</li> target="_blank"
</ul> class="text-decoration-none"
<form @submit.prevent="submit()"> >
<div class="mb-3"> دریافت فایل نمونه
<label for="formFileSm" class="form-label">انتخاب فایل</label> </a>
<input @change="addFile" class="custom-file-input form-control" id="formFileSm" type="file" accept="application/vnd.ms-excel,application/vnd.ms-excel.sheet.macroEnabled.12,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"> </v-list-item>
</div> </v-list>
<div class="mb-3">
<button type="submit" class="btn btn-primary"> <form @submit.prevent="submit">
<v-file-input
ref="fileInput"
label="انتخاب فایل"
accept=".xls,.xlsx,.xlsm"
@change="addFile"
variant="outlined"
class="mb-4"
:disabled="loading"
/>
<v-btn
type="submit"
color="primary"
block
:loading="loading"
:disabled="loading"
>
وارد کردن وارد کردن
</button> </v-btn>
</div>
</form> </form>
</div> </v-card-text>
</div> </v-card>
</div> </v-dialog>
</div> </div>
</template> </template>
<style scoped> <style scoped>
.bg-primary {
background-color: #1976d2 !important;
}
</style> </style>