diff --git a/src/pages/08_request-list/ProductExpansion.vue b/src/pages/08_request-list/ProductExpansion.vue index 788f4d0c..93f617eb 100644 --- a/src/pages/08_request-list/ProductExpansion.vue +++ b/src/pages/08_request-list/ProductExpansion.vue @@ -20,6 +20,8 @@ const props = defineProps<{ imgUrl?: string; requestCancel?: boolean; requestCancelReason?: string; + rejectRequestCancel?: boolean; + rejectRequestCancelReason?: string; installmentInfo?: { total: number; paid?: number; @@ -37,7 +39,9 @@ function changeableStatus(currentStatus?: RequestWorkStatus) { case RequestWorkStatus.Ready: case RequestWorkStatus.Waiting: case RequestWorkStatus.InProgress: - return [RequestWorkStatus.Canceled]; + return props.requestCancel && !props.rejectRequestCancel + ? [RequestWorkStatus.Canceled, RequestWorkStatus.RejectCancel] + : [RequestWorkStatus.Canceled]; case RequestWorkStatus.Validate: case RequestWorkStatus.Ended: case RequestWorkStatus.Completed: @@ -45,12 +49,15 @@ function changeableStatus(currentStatus?: RequestWorkStatus) { return []; default: if (props.readonly) return []; + const statuses = [ + RequestWorkStatus.Ready, + RequestWorkStatus.Ended, + RequestWorkStatus.Canceled, + ]; if (props.orderAble) { - return [ - RequestWorkStatus.Ready, - RequestWorkStatus.Ended, - RequestWorkStatus.Canceled, - ]; + return props.requestCancel && !props.rejectRequestCancel + ? [...statuses, RequestWorkStatus.RejectCancel] + : statuses; } else { return [RequestWorkStatus.Ended, RequestWorkStatus.Canceled]; } @@ -103,11 +110,19 @@ function changeableStatus(currentStatus?: RequestWorkStatus) { v-if="requestCancel && !cancel" :hsla-color="'--red-5-hsl'" class="q-ml-sm" - :title="$t(`requestList.status.CancelRequested`) || '-'" + :title=" + rejectRequestCancel + ? $t('requestList.status.RejectedCancel') || '-' + : $t(`requestList.status.CancelRequested`) || '-' + " > @@ -171,10 +186,11 @@ function changeableStatus(currentStatus?: RequestWorkStatus) { clickable v-close-popup class="row items-center" + :class="{ 'bordered-t': value === 'RejectCancel' }" @click=" $emit('changeStatus', { step: status, - requestWorkStatus: value, + requestWorkStatus: value as RequestWorkStatus, }) " > diff --git a/src/pages/08_request-list/RequestListView.vue b/src/pages/08_request-list/RequestListView.vue index eae2002a..47423b7c 100644 --- a/src/pages/08_request-list/RequestListView.vue +++ b/src/pages/08_request-list/RequestListView.vue @@ -11,10 +11,13 @@ import PropertiesExpansion from './PropertiesExpansion.vue'; import FormGroupHead from './FormGroupHead.vue'; import AvatarGroup from 'src/components/shared/AvatarGroup.vue'; import { StateButton } from 'components/button'; -import { CancelButton, MainButton } from 'components/button'; +import { CancelButton, MainButton, SaveButton } from 'components/button'; import DutyExpansion from './DutyExpansion.vue'; import MessengerExpansion from './MessengerExpansion.vue'; import RequestAction from './RequestAction.vue'; +import DialogFormContainer from 'src/components/dialog/DialogFormContainer.vue'; +import DialogHeader from 'src/components/dialog/DialogHeader.vue'; +import FormCancel from './FormCancel.vue'; // NOTE: Store import { @@ -104,6 +107,9 @@ const pageState = reactive({ hideMetaData: false, currentStep: 1, requestActionDialog: false, + rejectCancelDialog: false, + rejectCancelReason: '', + requestWorkId: '', }); // NOTE: Function @@ -173,6 +179,13 @@ async function triggerChangeStatusWork(step: Step, responsibleUserId?: string) { }); return; } + + if (step.workStatus === 'RejectCancel') { + pageState.rejectCancelDialog = true; + pageState.requestWorkId = step.requestWorkId; + return; + } + const res = await requestListStore.editStatusRequestWork(step); if (res) { const indexWork = workList.value?.findIndex( @@ -400,6 +413,30 @@ async function submitRequestAction(data: { pageState.requestActionDialog = false; } } + +async function submitRejectCancel() { + const current = route.params['requestListId']; + if (typeof current !== 'string') return; + + const res = await requestListStore.rejectRequestWork( + current, + pageState.requestWorkId, + { + reason: pageState.rejectCancelReason, + }, + ); + + if (res) { + const indexWork = workList.value?.findIndex( + (v) => v.id === pageState.requestWorkId, + ); + + workList.value[indexWork].rejectRequestCancel = true; + workList.value[indexWork].rejectRequestCancelReason = + pageState.rejectCancelReason; + pageState.rejectCancelDialog = false; + } +}