jws-frontend/src/components/upload-file/UploadFileCard.vue

109 lines
2.5 KiB
Vue
Raw Normal View History

2024-10-22 16:00:34 +07:00
<script lang="ts" setup>
import axios from 'axios';
import { getAttachmentHead, convertFileSize } from 'stores/utils';
import { onMounted, ref } from 'vue';
const api = axios.create({ baseURL: import.meta.env.VITE_API_BASE_URL });
const size = ref<number>(0);
const props = withDefaults(
defineProps<{
icon?: string;
color?: string;
name?: string;
url?: string;
progress?: number;
uploading?: { loaded: number; total: number };
feat: credit note (#171) * feat: add main page credit note * feat: enable credit note route and update menu item states * refactor: add i18n * refactor: edit i18n status * feat: add action column * feat: add empty form page * feat: add get data * feat: add type credit note status * refactor: add type name en * refactor: add type credit note status in type credit note * feat: add hsla colors * refactor: add slot grid * refactor: handle hide kebab edit show only tab tssued * feat: show grid card * feat: i18n * feat: add credit note form and dialog * refactor: add props hide kebab deelete * refactor: hide kebab * style: update color segments to indigo theme * feat: i18n * fix: update labels for credit note fields * refactor: add type * feat: new select quotation * refactor: use new select quotation * feat: navigate to * refactor: function trigger and navigate to * feat: i18n bank * feat: add payment expansion component and integrate into credit note form * refactor: bind i18n pay condition * refactor: navigate to get quotation id * feat: i18n * fix: update label for createdBy field in credit note form * feat: add credit note information expansion component * feat: add Credit Note expansion component and update form layout * refactor: bind quotation id and send * refactor: deelete duplicate type * refactor: show state button * refactor: handle show status * feat: add function update payback status * feat: add return and canceled reasons to credit note translations * feat: enhance SelectReadyRequestWork component with credit note handling and fetch parameters * feat: type * feat: add status handling and optional display for employee table * refactor: rename selectedQuotationId to quotationId in FormCredit component * feat: set default opened state for CreditNoteExpansion and add reason options * feat: update PaymentExpansion to handle payback type selection and clear fields for cash payments * feat: enhance ProductExpansion to support credit note handling and adjust price calculations * feat: implement product handling and price calculation in CreditNote form * feat: add manage attachment function to store * refactor: bind delete credit note * feat: add credit note status and reference fields to types * refactor: update task step handling and simplify request work structure in credit note form * feat: add navigation to quotation from credit note form * feat: enhance upload section layout based on file data * feat: add readonly functionality to credit note form and related components * refactor: remove console log * feat: update i18n * style: add rounded corners to complete view container in quotation form * feat: add RefundInformation component and update credit note form status handling * feat: i18n * feat: update payback status endpoint and add paybackStatus to CreditNote type * feat: enhance QuotationFormReceipt component with optional props and slot support * feat: integrate payback status handling in RefundInformation and FormPage components * feat: add external file group * feat: update API endpoint paths for credit note operations * feat: improve layout and styling in UploadFile components * feat: implement file upload and management in Credit Note * refactor: update upload to check if it is redirect or not * feat: upload file slips * feat: add payback date dispaly * refactor: change module no * fix: icon link to main page instead * feat: add file dialog with image download functionality * fix: view slip * feat: add download button to image viewer * feat: handle after submit * feat: conditionally render bank transfer information * feat: handle upload file on create * feat: handle change payback status * feat: payback type in credit note form * fix: correct reference to quotation data in goToQuotation function --------- Co-authored-by: Methapon2001 <61303214+Methapon2001@users.noreply.github.com> Co-authored-by: puriphatt <puriphat@frappet.com> Co-authored-by: Thanaphon Frappet <thanaphon@frappet.com>
2025-01-14 09:08:31 +07:00
idle?: boolean;
2024-10-22 16:00:34 +07:00
clickable?: boolean;
closeable?: boolean;
}>(),
{
icon: 'mdi-file-outline',
color: 'var(--brand-1)',
name: '-',
url: '-',
progress: 0,
uploading: () => ({ loaded: 0, total: 0 }),
clickable: false,
closeable: true,
},
);
defineEmits<{
(e: 'close'): void;
(e: 'click'): void;
}>();
async function getSize() {
if (props.progress !== 1) return;
const res = await getAttachmentHead(api, props.url);
if (res && res['content-length']) size.value = Number(res['content-length']);
}
onMounted(() => {
getSize();
});
</script>
<template>
<div
2024-10-24 11:31:52 +07:00
class="bordered rounded row items-center q-pa-md card"
2024-10-22 16:00:34 +07:00
:class="{ 'cursor-pointer': clickable }"
@click="$emit('click')"
>
<q-icon :name="icon" size="lg" :style="`color: ${color}`" />
2025-09-11 12:53:13 +07:00
<div class="col column q-pl-md">
<div class="ellipsis full-width" style="max-width: 65vw !important">
{{ name }}
2025-09-11 12:53:13 +07:00
</div>
2024-10-22 16:00:34 +07:00
<span class="text-caption app-text-muted-2">
{{
uploading.loaded
? `${convertFileSize(uploading.loaded)} of ${convertFileSize(uploading.total)}`
: `${convertFileSize(size)} of ${convertFileSize(size)}`
}}
<q-spinner-ios
v-if="progress !== 1"
class="q-mx-xs"
color="primary"
size="1.5em"
/>
feat: credit note (#171) * feat: add main page credit note * feat: enable credit note route and update menu item states * refactor: add i18n * refactor: edit i18n status * feat: add action column * feat: add empty form page * feat: add get data * feat: add type credit note status * refactor: add type name en * refactor: add type credit note status in type credit note * feat: add hsla colors * refactor: add slot grid * refactor: handle hide kebab edit show only tab tssued * feat: show grid card * feat: i18n * feat: add credit note form and dialog * refactor: add props hide kebab deelete * refactor: hide kebab * style: update color segments to indigo theme * feat: i18n * fix: update labels for credit note fields * refactor: add type * feat: new select quotation * refactor: use new select quotation * feat: navigate to * refactor: function trigger and navigate to * feat: i18n bank * feat: add payment expansion component and integrate into credit note form * refactor: bind i18n pay condition * refactor: navigate to get quotation id * feat: i18n * fix: update label for createdBy field in credit note form * feat: add credit note information expansion component * feat: add Credit Note expansion component and update form layout * refactor: bind quotation id and send * refactor: deelete duplicate type * refactor: show state button * refactor: handle show status * feat: add function update payback status * feat: add return and canceled reasons to credit note translations * feat: enhance SelectReadyRequestWork component with credit note handling and fetch parameters * feat: type * feat: add status handling and optional display for employee table * refactor: rename selectedQuotationId to quotationId in FormCredit component * feat: set default opened state for CreditNoteExpansion and add reason options * feat: update PaymentExpansion to handle payback type selection and clear fields for cash payments * feat: enhance ProductExpansion to support credit note handling and adjust price calculations * feat: implement product handling and price calculation in CreditNote form * feat: add manage attachment function to store * refactor: bind delete credit note * feat: add credit note status and reference fields to types * refactor: update task step handling and simplify request work structure in credit note form * feat: add navigation to quotation from credit note form * feat: enhance upload section layout based on file data * feat: add readonly functionality to credit note form and related components * refactor: remove console log * feat: update i18n * style: add rounded corners to complete view container in quotation form * feat: add RefundInformation component and update credit note form status handling * feat: i18n * feat: update payback status endpoint and add paybackStatus to CreditNote type * feat: enhance QuotationFormReceipt component with optional props and slot support * feat: integrate payback status handling in RefundInformation and FormPage components * feat: add external file group * feat: update API endpoint paths for credit note operations * feat: improve layout and styling in UploadFile components * feat: implement file upload and management in Credit Note * refactor: update upload to check if it is redirect or not * feat: upload file slips * feat: add payback date dispaly * refactor: change module no * fix: icon link to main page instead * feat: add file dialog with image download functionality * fix: view slip * feat: add download button to image viewer * feat: handle after submit * feat: conditionally render bank transfer information * feat: handle upload file on create * feat: handle change payback status * feat: payback type in credit note form * fix: correct reference to quotation data in goToQuotation function --------- Co-authored-by: Methapon2001 <61303214+Methapon2001@users.noreply.github.com> Co-authored-by: puriphatt <puriphat@frappet.com> Co-authored-by: Thanaphon Frappet <thanaphon@frappet.com>
2025-01-14 09:08:31 +07:00
<q-icon
v-if="progress === 1 && !idle"
name="mdi-check-circle"
color="positive"
size="1rem"
/>
{{ idle ? `Pending` : progress !== 1 ? `Uploading...` : 'Completed' }}
2024-10-22 16:00:34 +07:00
</span>
2025-09-11 12:53:13 +07:00
</div>
2024-10-22 16:00:34 +07:00
<q-btn
v-if="closeable"
icon="mdi-close"
flat
rounded
size="sm"
padding="0"
class="q-ml-auto self-start"
style="color: hsl(var(--text-mute))"
@click.stop="$emit('close')"
/>
<q-linear-progress
v-if="progress !== 1"
:value="progress"
class="q-mt-sm rounded"
color="info"
/>
</div>
</template>
2024-10-24 11:31:52 +07:00
<style scoped>
.card:hover {
transition: ease-in-out 0.3s;
background: hsla(var(--info-bg) / 0.05);
}
</style>