Files
admin-web/src/modules/overseas-master-data/inquiryNavigation.ts
T

17 lines
1.2 KiB
TypeScript

import type { LocationQuery, RouteLocationRaw } from 'vue-router'
import type { CapacityInquiry } from './capacityOfferTypes'
const businessNo = (value: unknown): value is string => typeof value === 'string' && /^[A-Z][A-Z0-9-]{1,63}$/.test(value)
export function inquirySourceQuery(row: Pick<CapacityInquiry, 'offerNo' | 'bookingNo'>) {
return { fleetSource: 'inquiry', fleetOfferNo: row.offerNo, fleetBookingNo: row.bookingNo }
}
export function inquiryReturnTarget(query: LocationQuery = {}): RouteLocationRaw | null {
if (query.fleetSource !== 'inquiry' || !businessNo(query.fleetOfferNo) || !businessNo(query.fleetBookingNo)) return null
return { name: 'overseas-master-data-capacity-offer-detail', params: { offerNo: query.fleetOfferNo }, query: { inquiry: query.fleetBookingNo } }
}
export function inquiryOrderTarget(row: CapacityInquiry, can: (permission: string) => boolean): RouteLocationRaw | null {
const domain = row.businessType === 'US_TRUCK' ? 'truck' : 'looseboard'
if (!row.businessOrderNo || !can(`platform:overseas-business:${domain}:list`)) return null
return { name: domain === 'truck' ? 'overseas-business-trucks' : 'overseas-business-looseboards', query: { orderNo: row.businessOrderNo, ...inquirySourceQuery(row) } }
}