17 lines
1.2 KiB
TypeScript
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) } }
|
|
}
|