* feat: new file * feat: function api debit * feat: add route debit * feat: new form page * refactor: show menu debit * refactor: add type debit note status * feat: add i18n * feat: add constants * feat: add stores * feat: layout * feat: add function * refactor: change name value * feat: form select quotation * refactor: change name url * refactor: use form debit * refactor: change src import * refactor: move file form debit * refactor: add i18n * feat: add type debit note * refactor: add columns * refactor: bind value columns * refactor: change name Table * refactor: edit type * refactor: bind type debit note * refactor: bind value debit * refactor: chame name function * fix: calculate page * refactor: delete table * refactor: change name get list * refactor: change i18n * refactor: change name value * refactor: bind navigate and trigger delete * refactor: format number deciml * refactor: add i18n * feat: new page * refactor: add color debit * feat: Debit tab #178 * feat: TableRequest * refactor: edit type pay condition * refactor: add i18n btn submit * refactor: use type enum * feat: edit layout product expansion * refactor: bind function * refactor: show code * feat: add input search and select status * feat: paymentform * refactor: edit type * refactor: add manage file and edit end point * feat: add form.ts * refactor: send mode * refactor: edit v-model of due date * feat: submit create debit * fix: status * refactor: handle data not allow * fix: call updateDebitNote in edit mode and simplify payload handling * refactor: hide edit * refactor: handle pay condition only full * refactor: delete pay split * refactor: add query * refactor: handle is debit note * refactor: handle is quotation * refactor: add props hide * refactor: tap payment and receipt * refactor: add i18n * feat: view document * refactor: handle btn view doc * refactor: use my remark --------- Co-authored-by: Thanaphon Frappet <thanaphon@frappet.com> Co-authored-by: nwpptrs <jay02499@gmail.com> Co-authored-by: aif912752 <siripak@chamomind.com>
116 lines
2.5 KiB
Vue
116 lines
2.5 KiB
Vue
<script lang="ts" setup>
|
|
import useOptionStore from 'src/stores/options';
|
|
import { watch } from 'vue';
|
|
import QuotationFormInfo from 'src/pages/05_quotation/QuotationFormInfo.vue';
|
|
import { PayCondition } from 'src/stores/quotations';
|
|
|
|
const props = withDefaults(
|
|
defineProps<{
|
|
readonly?: boolean;
|
|
installmentNo?: number[];
|
|
installmentAmount?: number;
|
|
}>(),
|
|
{},
|
|
);
|
|
|
|
const payBillDate = defineModel<Date | null | undefined>('payBillDate', {
|
|
required: false,
|
|
});
|
|
const payType = defineModel<PayCondition>('payType', { required: true });
|
|
const paySplitCount = defineModel<number | null>('paySplitCount', {
|
|
default: 1,
|
|
});
|
|
const paySplit = defineModel<{ no: number; name?: string; amount: number }[]>(
|
|
'paySplit',
|
|
{ required: true },
|
|
);
|
|
const summaryPrice = defineModel<{
|
|
totalPrice: number;
|
|
totalDiscount: number;
|
|
vat: number;
|
|
vatExcluded: number;
|
|
finalPrice: number;
|
|
}>('summaryPrice', {
|
|
required: true,
|
|
default: {
|
|
totalPrice: 0,
|
|
totalDiscount: 0,
|
|
vat: 0,
|
|
vatExcluded: 0,
|
|
finalPrice: 0,
|
|
},
|
|
});
|
|
|
|
const optionStore = useOptionStore();
|
|
</script>
|
|
<template>
|
|
<q-expansion-item
|
|
dense
|
|
class="overflow-hidden bordered full-width"
|
|
switch-toggle-side
|
|
style="border-radius: var(--radius-2)"
|
|
expand-icon="mdi-chevron-down-circle"
|
|
header-class="surface-1 q-py-sm text-medium text-body1"
|
|
>
|
|
<template #header>
|
|
<span>
|
|
{{ $t('general.payment') }}
|
|
</span>
|
|
</template>
|
|
|
|
<main class="surface-1 q-pa-md full-width">
|
|
<QuotationFormInfo
|
|
v-bind="{ ...$props }"
|
|
debit-note
|
|
v-model:pay-type="payType"
|
|
v-model:pay-split-count="paySplitCount"
|
|
v-model:pay-split="paySplit"
|
|
v-model:pay-bill-date="payBillDate"
|
|
v-model:summary-price="summaryPrice"
|
|
/>
|
|
</main>
|
|
</q-expansion-item>
|
|
</template>
|
|
<style scoped>
|
|
.icon-wrapper {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
aspect-ratio: 1/1;
|
|
font-size: 1.5rem;
|
|
padding: var(--size-1);
|
|
border-radius: var(--radius-2);
|
|
}
|
|
|
|
:deep(.price-tag .q-field__control) {
|
|
display: flex;
|
|
align-items: center;
|
|
width: 90px;
|
|
height: 25px;
|
|
}
|
|
|
|
.credit-note-color {
|
|
--_color: var(--indigo-10-hsl);
|
|
}
|
|
|
|
.bg-color {
|
|
color: white;
|
|
background: hsla(var(--_color));
|
|
}
|
|
|
|
.dark .bg-color {
|
|
--_color: var(--orange-6-hsl);
|
|
}
|
|
|
|
.bg-color-light {
|
|
background: hsla(var(--_color) / 0.1);
|
|
}
|
|
|
|
.dark .bg-color-light {
|
|
--_color: var(--orange-6-hsl / 0.2);
|
|
}
|
|
|
|
.price-container > * {
|
|
padding: var(--size-1);
|
|
}
|
|
</style>
|