diff --git a/src/pages/08_request-list/RequestAction.vue b/src/pages/08_request-list/RequestAction.vue index ac3fe8ea..b9fbf082 100644 --- a/src/pages/08_request-list/RequestAction.vue +++ b/src/pages/08_request-list/RequestAction.vue @@ -19,7 +19,13 @@ defineProps<{ }>(); defineEmits<{ - (e: 'submit'): void; + ( + e: 'submit', + data: { + form: { responsibleUserLocal: boolean; responsibleUserId: string }; + selected: { _work: RequestWork }[]; + }, + ): void; }>(); enum Step { @@ -58,6 +64,7 @@ function prev() { $t('menu.product'), $t('requestList.action.configure'), ]" + :key="i" > @@ -150,7 +157,7 @@ function prev() { v-if="step === Step.Configure" id="btn-save" solid - @click="$emit('submit')" + @click="$emit('submit', { form, selected })" /> diff --git a/src/pages/08_request-list/RequestListView.vue b/src/pages/08_request-list/RequestListView.vue index 5010461c..2f5ee598 100644 --- a/src/pages/08_request-list/RequestListView.vue +++ b/src/pages/08_request-list/RequestListView.vue @@ -11,9 +11,10 @@ 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 } from 'components/button'; +import { CancelButton, MainButton } from 'components/button'; import DutyExpansion from './DutyExpansion.vue'; import MessengerExpansion from './MessengerExpansion.vue'; +import RequestAction from './RequestAction.vue'; // NOTE: Store import { @@ -68,9 +69,41 @@ const statusFile = ref({ const refDocumentExpansion = ref[]>([]); const data = ref(); const flow = ref(); +const productsList = computed(() => + workList.value + ?.filter((v) => + v.productService.work?.attributes.workflowStep?.[ + pageState.currentStep - 1 + ]?.productsId.includes(v.productService.productId), + ) + .map((v) => { + const _props = + v.productService.work?.attributes?.workflowStep[ + pageState.currentStep - 1 + ]?.attributes?.properties; + return Object.assign(v, { + _documentExpansion: _props.some( + (v: PropVariant) => v.fieldName === 'documentCheck', + ), + _formExpansion: _props.some( + (v: PropVariant) => v.fieldName === 'designForm', + ), + _dutyExpansion: _props.some((v: PropVariant) => v.fieldName === 'duty'), + _messengerExpansion: _props.some( + (v: PropVariant) => v.fieldName === 'messenger', + ), + }); + }) + .sort( + (lhs, rhs) => + lhs.productService.installmentNo - rhs.productService.installmentNo, + ), +); + const pageState = reactive({ hideMetaData: false, currentStep: 1, + requestActionDialog: false, }); // NOTE: Function @@ -342,6 +375,31 @@ function closeTab() { cancel: () => {}, }); } + +function openRequestAction() { + pageState.requestActionDialog = true; +} + +async function submitRequestAction(data: { + form: { responsibleUserLocal: boolean; responsibleUserId: string }; + selected: { _work: RequestWork }[]; +}) { + const requestWorksId = data.selected.map((s) => s._work.id); + + const res = await requestListStore.actionRequestWork( + route.params['requestListId'] as string, + pageState.currentStep, + requestWorksId.map((v) => ({ + responsibleUserId: data.form.responsibleUserId, + responsibleUserLocal: data.form.responsibleUserLocal, + requestWorkId: v!, + })), + ); + if (res) { + await getData(); + pageState.requestActionDialog = false; + } +}