diff --git a/src/pages/08_request-list/MainPage.vue b/src/pages/08_request-list/MainPage.vue index f1991e09..15c028b5 100644 --- a/src/pages/08_request-list/MainPage.vue +++ b/src/pages/08_request-list/MainPage.vue @@ -23,6 +23,7 @@ import { useRequestList } from 'src/stores/request-list'; import { RequestData, RequestDataStatus } from 'src/stores/request-list/types'; import { dialogWarningClose } from 'src/stores/utils'; import { CancelButton, SaveButton } from 'src/components/button'; +import { getRole } from 'src/services/keycloak'; const $q = useQuasar(); const navigatorStore = useNavigator(); @@ -92,6 +93,19 @@ function triggerCancel(id: string) { }); } +const hideAction = computed(() => { + const role = getRole(); + const allowedRoles = [ + 'head_of_admin', + 'head_of_sale', + 'admin', + 'sale', + 'system', + ]; + + return !role || !role.some((r) => allowedRoles.includes(r)); +}); + function triggerView(opts: { requestData: RequestData }) { const url = new URL( `/request-list/${opts.requestData.id}`, @@ -379,6 +393,7 @@ watch([() => pageState.inputSearch, () => pageState.statusFilter], () => { :rows="data" :grid="pageState.gridView" :visible-columns="pageState.fieldSelected" + :hide-action @view="(data) => triggerView({ requestData: data })" @delete="(data) => triggerCancel(data.id)" @reject-cancel=" diff --git a/src/pages/08_request-list/ProductExpansion.vue b/src/pages/08_request-list/ProductExpansion.vue index 4d110dc3..d2214d03 100644 --- a/src/pages/08_request-list/ProductExpansion.vue +++ b/src/pages/08_request-list/ProductExpansion.vue @@ -4,6 +4,8 @@ import { baseUrl } from 'src/stores/utils'; import { ProductRelation, PayCondition } from 'src/stores/quotations/types'; import { Step, RequestWorkStatus } from 'src/stores/request-list/types'; import BadgeComponent from 'src/components/BadgeComponent.vue'; +import { computed } from 'vue'; +import { getRole } from 'src/services/keycloak'; defineEmits<{ ( @@ -34,6 +36,19 @@ const props = defineProps<{ orderAble?: boolean; }>(); +const canCanceled = computed(() => { + const role = getRole(); + const allowedRoles = [ + 'head_of_admin', + 'head_of_sale', + 'admin', + 'sale', + 'system', + ]; + + return !role || role.some((r) => allowedRoles.includes(r)); +}); + function changeableStatus(currentStatus?: RequestWorkStatus) { switch (currentStatus) { case RequestWorkStatus.Ready: @@ -53,7 +68,7 @@ function changeableStatus(currentStatus?: RequestWorkStatus) { RequestWorkStatus.Ready, RequestWorkStatus.Ended, RequestWorkStatus.Canceled, - ]; + ].filter((v) => canCanceled.value || v !== RequestWorkStatus.Canceled); if (props.orderAble) { return props.requestCancel && !props.rejectRequestCancel ? [...statuses, RequestWorkStatus.RejectCancel] diff --git a/src/pages/08_request-list/TableRequestList.vue b/src/pages/08_request-list/TableRequestList.vue index ed9d1227..5872f96d 100644 --- a/src/pages/08_request-list/TableRequestList.vue +++ b/src/pages/08_request-list/TableRequestList.vue @@ -20,6 +20,7 @@ const props = withDefaults( columns: QTableProps['columns']; grid?: boolean; visibleColumns?: string[]; + hideAction?: boolean; }>(), { row: () => [], @@ -224,6 +225,7 @@ function getEmployeeName( />