jws-frontend/src/pages/05_quotation/TableRequest.vue

186 lines
4.4 KiB
Vue
Raw Normal View History

2024-12-18 17:55:45 +07:00
<script setup lang="ts">
import { QTableColumn, QTableSlots } from 'quasar';
import { RequestData, RequestDataStatus } from 'src/stores/request-list/types';
import BadgeComponent from 'components/BadgeComponent.vue';
withDefaults(
defineProps<{
rows: RequestData[];
}>(),
{ rows: () => [] },
);
const columns = [
{
name: 'order',
align: 'center',
label: 'general.order',
field: (e: RequestData & { _index: number }) => e._index + 1,
},
{
2024-12-23 10:04:58 +07:00
name: '#codeRequest',
2024-12-18 17:55:45 +07:00
align: 'center',
label: 'quotation.tableColumnsRequest.code',
field: (v: RequestData) => v.code,
},
{
name: 'employeeName',
align: 'left',
label: 'customer.employee',
field: (v: RequestData) => {
return `${v.employee.firstName} ${v.employee.lastName}`;
},
},
{
2024-12-23 10:04:58 +07:00
name: '#requestDataStatus',
2024-12-18 17:55:45 +07:00
align: 'left',
label: 'general.status',
field: (v: RequestData) => v.requestDataStatus,
},
] satisfies QTableColumn[];
const emits = defineEmits<{
(e: 'success'): void;
}>();
2024-12-23 10:04:58 +07:00
function goToRequestList(id: string) {
const url = new URL(`/request-list/${id}`, window.location.origin);
window.open(url.toString(), '_blank');
}
2024-12-18 17:55:45 +07:00
</script>
<template>
<q-table
:rows-per-page-options="[0]"
:rows="
rows.map((data, i) => ({
...data,
_index: i,
}))
"
:columns
bordered
flat
selection="multiple"
card-container-class="q-col-gutter-sm"
feat: debit note (#172) * 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>
2025-01-27 09:04:08 +07:00
:no-data-label="$t('general.noDataTable')"
2024-12-18 17:55:45 +07:00
class="full-width"
refactor: responsive (#180) * refactor: can open one dropdown whe lt.md * style: update MainLayout background color and fix avatar border class name * feat: add touch position binding for dropdown in ProfileMenu * refactor: enhance icon styling in DrawerComponent * fix: update screen size conditions * feat: add responsive search and filter functionality in MainPage * feat: update styling and functionality in BasicInformation and MainPage components * feat: package view mode improve layout and responsiveness * feat: improve layout and responsiveness of ProfileBanner component * feat: enhance TreeView component with improved icon layout and cursor pointer styling * feat: update DialogForm component to prevent text wrapping in the center column * feat: enhance FormDocument, PriceDataComponent, and BasicInfoProduct components with layout and styling improvements * feat: enhance ProfileBanner dark tab * feat: 02 => responsive & responsibleArea type * fix: layout header bg condition & 02 filter col * feat: 04 flow => add AddButton component and enhance layout in FormFlow and FlowDialog * feat: 07 => enhance layout and responsiveness * refactor: simplify header structure and improve layout consistency * fix: improve text color in ItemCard and adjust responsive breakpoints in product service group * refactor: 05 => enhance layout responsiveness and improve class bindings in quotation components * refactor: enhance styling and improve props flexibility in dialog and select components * refactor: 05 => enhance layout responsiveness in quotation components * refactor: 05 => enhance layout responsiveness * refactor: 05 => formWorkerAdd * refactor: 05 => formWorkerAdd Product table * refactor: 05 => improve layout responsiveness and enhance component structure * refactor: enhance grid view handling and improve component imports * refactor: improve column classes for better layout consistency * refactor: 09 => enhance layout structure and improve responsiveness in task order views * refactor: 10 => enhance invoice main page layout and improve component interactions * refactor: 13 => enhance receipt main page layout and improve component interactions * refactor: 11 => enhance layout and improve responsiveness in credit note pages * refactor: 01 => screen.sm search & filter * refactor: 01 => improve layout responsiveness and fix variable naming in branch management forms --------- Co-authored-by: puriphatt <puriphat@frappet.com>
2025-01-27 10:39:53 +07:00
:pagination="{
rowsPerPage: 0,
}"
2024-12-18 17:55:45 +07:00
>
<template v-slot:header="props">
<q-tr
style="background-color: hsla(var(--info-bg) / 0.07)"
:props="props"
>
<q-th v-for="col in columns" :key="col.name" :props="props">
2024-12-23 10:04:58 +07:00
{{ $t(col.label) }}
2024-12-18 17:55:45 +07:00
</q-th>
</q-tr>
</template>
<template
v-slot:body="props: {
row: RequestData & { _index: number };
} & Omit<Parameters<QTableSlots['body']>[0], 'row'>"
>
<q-tr :class="{ dark: $q.dark.isActive }" class="text-center">
refactor: responsive (#180) * refactor: can open one dropdown whe lt.md * style: update MainLayout background color and fix avatar border class name * feat: add touch position binding for dropdown in ProfileMenu * refactor: enhance icon styling in DrawerComponent * fix: update screen size conditions * feat: add responsive search and filter functionality in MainPage * feat: update styling and functionality in BasicInformation and MainPage components * feat: package view mode improve layout and responsiveness * feat: improve layout and responsiveness of ProfileBanner component * feat: enhance TreeView component with improved icon layout and cursor pointer styling * feat: update DialogForm component to prevent text wrapping in the center column * feat: enhance FormDocument, PriceDataComponent, and BasicInfoProduct components with layout and styling improvements * feat: enhance ProfileBanner dark tab * feat: 02 => responsive & responsibleArea type * fix: layout header bg condition & 02 filter col * feat: 04 flow => add AddButton component and enhance layout in FormFlow and FlowDialog * feat: 07 => enhance layout and responsiveness * refactor: simplify header structure and improve layout consistency * fix: improve text color in ItemCard and adjust responsive breakpoints in product service group * refactor: 05 => enhance layout responsiveness and improve class bindings in quotation components * refactor: enhance styling and improve props flexibility in dialog and select components * refactor: 05 => enhance layout responsiveness in quotation components * refactor: 05 => enhance layout responsiveness * refactor: 05 => formWorkerAdd * refactor: 05 => formWorkerAdd Product table * refactor: 05 => improve layout responsiveness and enhance component structure * refactor: enhance grid view handling and improve component imports * refactor: improve column classes for better layout consistency * refactor: 09 => enhance layout structure and improve responsiveness in task order views * refactor: 10 => enhance invoice main page layout and improve component interactions * refactor: 13 => enhance receipt main page layout and improve component interactions * refactor: 11 => enhance layout and improve responsiveness in credit note pages * refactor: 01 => screen.sm search & filter * refactor: 01 => improve layout responsiveness and fix variable naming in branch management forms --------- Co-authored-by: puriphatt <puriphat@frappet.com>
2025-01-27 10:39:53 +07:00
<q-td v-for="col in columns" :align="col.align" :key="col.name">
2024-12-18 17:55:45 +07:00
<!-- NOTE: custom column will starts with # -->
2024-12-23 10:04:58 +07:00
<template v-if="!col.name.startsWith('#')">
2024-12-18 17:55:45 +07:00
<span>
{{
typeof col.field === 'string'
? props.row[col.field as keyof RequestData]
: col.field(props.row)
}}
</span>
</template>
2024-12-23 10:04:58 +07:00
<template v-if="col.name === '#codeRequest'">
<span
class="cursor-pointer link"
2025-02-18 17:13:36 +07:00
:id="`go-to-request-list-${props.row.code}`"
2024-12-23 10:04:58 +07:00
@click="goToRequestList(props.row.id)"
>
{{ props.row.code }}
</span>
</template>
<template v-if="col.name === '#requestDataStatus'">
2024-12-18 17:55:45 +07:00
<span>
<BadgeComponent
:hsla-color="
props.row.requestDataStatus === RequestDataStatus.Pending
? '--orange-5-hsl'
: props.row.requestDataStatus ===
RequestDataStatus.InProgress
? '--blue-6-hsl'
: props.row.requestDataStatus ===
RequestDataStatus.Completed
? '--green-8-hsl'
: '--orange-5-hsl'
"
:title="
$t(`requestList.status.${props.row.requestDataStatus}`) || '-'
"
/>
</span>
</template>
</q-td>
</q-tr>
</template>
</q-table>
</template>
<style scoped>
2024-12-23 10:04:58 +07:00
.link {
color: hsl(var(--info-bg));
text-decoration: underline;
}
2024-12-18 17:55:45 +07:00
.selectable-item {
padding: 0;
appearance: none;
border: none;
background: transparent;
position: relative;
color: inherit;
& > .selectable-item__pos {
display: none;
}
}
.selectable-item__selected {
& > :deep(*) {
border: 1px solid var(--_color, var(--brand-1)) !important;
}
& > .selectable-item__pos {
display: block;
position: absolute;
margin: var(--size-2);
right: 0;
top: 0;
border-radius: 50%;
width: 20px;
height: 20px;
color: var(--surface-1);
background: var(--brand-1);
color: currentColor;
}
}
.selectable-item__disabled {
filter: grayscale(1);
opacity: 0.5;
& :deep(*) {
cursor: not-allowed;
}
}
</style>