refactor: task order main page & constants

This commit is contained in:
puriphatt 2024-12-02 10:35:50 +07:00
parent 66fed37183
commit 936fd7ebdd
4 changed files with 127 additions and 17 deletions

View file

@ -892,6 +892,11 @@ export default {
taskOrder: { taskOrder: {
title: 'Task Order', title: 'Task Order',
caption: 'All Task Order', caption: 'All Task Order',
receiveTaskOrder: 'Receive Task Order',
sendTaskOrder: 'Send Task Order',
payment: 'Payment',
goodReceipt: 'Good Receipt',
}, },
dialog: { dialog: {

View file

@ -883,6 +883,11 @@ export default {
taskOrder: { taskOrder: {
title: 'ใบสั่งงาน', title: 'ใบสั่งงาน',
caption: 'ใบสั่งงานทั้งหมด', caption: 'ใบสั่งงานทั้งหมด',
receiveTaskOrder: 'รับใบสั่งงาน',
sendTaskOrder: 'ส่งใบสั่งงาน',
payment: 'ขำระเงิน',
goodReceipt: 'ใบรับสินค้า',
}, },
dialog: { dialog: {

View file

@ -12,6 +12,7 @@ import PaginationPageSize from 'src/components/PaginationPageSize.vue';
// NOTE: Stores & Type // NOTE: Stores & Type
import { useNavigator } from 'src/stores/navigator'; import { useNavigator } from 'src/stores/navigator';
import useFlowStore from 'src/stores/flow'; import useFlowStore from 'src/stores/flow';
import { pageTabs } from './constants';
const navigatorStore = useNavigator(); const navigatorStore = useNavigator();
const flowStore = useFlowStore(); const flowStore = useFlowStore();
@ -19,6 +20,7 @@ const flowStore = useFlowStore();
// NOTE: Variable // NOTE: Variable
const pageState = reactive({ const pageState = reactive({
// TODO: replace state // TODO: replace state
currentTab: 'title',
hideStat: false, hideStat: false,
statusFilter: 'None', statusFilter: 'None',
inputSearch: '', inputSearch: '',
@ -80,21 +82,33 @@ onMounted(async () => {
labelI18n labelI18n
:branch="[ :branch="[
{ {
icon: 'icon-park-outline:loading-one', icon: 'material-symbols-light:receipt-long',
count: 0, count: 0,
label: 'requestList.status.Pending', label: 'taskOrder.title',
color: 'orange',
},
{
icon: 'mdi-timer-sand',
count: 0,
label: 'requestList.status.InProgress',
color: 'blue', color: 'blue',
}, },
{ {
icon: 'mdi-check-decagram-outline', icon: 'material-symbols-light:receipt-long',
count: 0, count: 0,
label: 'requestList.status.Completed', label: 'taskOrder.receiveTaskOrder',
color: 'orange',
},
{
icon: 'mdi:email-fast-outline',
count: 0,
label: 'taskOrder.sendTaskOrder',
color: 'pink',
},
{
icon: 'tabler:cash-register',
count: 0,
label: 'taskOrder.payment',
color: 'purple',
},
{
icon: 'fluent:receipt-bag-24-regular',
count: 0,
label: 'taskOrder.goodReceipt',
color: 'light-green', color: 'light-green',
}, },
]" ]"
@ -108,10 +122,12 @@ onMounted(async () => {
<div class="column full-height"> <div class="column full-height">
<!-- SEC: header content --> <!-- SEC: header content -->
<header <header
class="row surface-3 justify-between full-width items-center bordered-b" class="row surface-3 justify-between full-width items-center"
style="z-index: 1" style="z-index: 1"
> >
<div class="row q-py-sm q-px-md justify-between full-width"> <section
class="row q-py-sm q-px-md bordered-b justify-between full-width"
>
<q-input <q-input
for="input-search" for="input-search"
outlined outlined
@ -165,10 +181,6 @@ onMounted(async () => {
]" ]"
/> />
<!-- TODO: select --> <!-- TODO: select -->
<!-- fieldSelectedOption.map((v) => ({
...v,
label: v.label && $t(v.label),
})) -->
<q-select <q-select
v-if="!pageState.gridView" v-if="!pageState.gridView"
id="select-field" id="select-field"
@ -233,8 +245,87 @@ onMounted(async () => {
</template> </template>
</q-btn-toggle> </q-btn-toggle>
</div> </div>
</div> </section>
<nav class="surface-2 bordered-b q-px-md full-width">
<q-tabs
inline-label
mobile-arrows
dense
v-model="pageState.currentTab"
align="left"
class="full-width"
active-color="info"
>
<q-tab
v-for="tab in pageTabs"
:name="tab.value"
:key="tab.value"
@click="
() => {
pageState.currentTab = tab.value;
pageState.inputSearch = '';
flowStore.rotate();
}
"
>
<div
class="row text-capitalize"
:class="
pageState.currentTab === tab.value
? 'text-bold'
: 'app-text-muted'
"
>
{{ $t(`taskOrder.${tab.label}`) }}
</div>
</q-tab>
</q-tabs>
</nav>
</header> </header>
<!-- SEC: body content -->
<article
v-if="true"
class="col surface-2 flex items-center justify-center"
>
<NoData :not-found="!!pageState.inputSearch" />
</article>
<article
v-else
class="col surface-2 full-width scroll q-pa-md"
></article>
<!-- SEC: footer content -->
<!-- <footer
class="row justify-between items-center q-px-md q-py-sm surface-2"
v-if="pageMax > 0"
>
<div class="col-4">
<div class="row items-center no-wrap">
<div class="app-text-muted q-mr-sm" v-if="$q.screen.gt.sm">
{{ $t('general.recordPerPage') }}
</div>
<div><PaginationPageSize v-model="pageSize" /></div>
</div>
</div>
<div class="col-4 row justify-center app-text-muted">
{{
$t('general.recordsPage', {
resultcurrentPage: data.length,
total: pageState.inputSearch ? data.length : pageState.total,
})
}}
</div>
<nav class="col-4 row justify-end">
<PaginationComponent
v-model:current-page="page"
v-model:max-page="pageMax"
:fetch-data="() => fetchList({ rotateFlowId: true })"
/>
</nav>
</footer> -->
</div> </div>
</section> </section>
</div> </div>

View file

@ -0,0 +1,9 @@
import { QTableProps } from 'quasar';
export const pageTabs = [
{ label: 'title', value: 'title' },
{ label: 'receiveTaskOrder', value: 'receiveTaskOrder' },
{ label: 'sendTaskOrder', value: 'sendTaskOrder' },
{ label: 'payment', value: 'payment' },
{ label: 'goodReceipt', value: 'goodReceipt' },
];