提交
This commit is contained in:
1 parent
67d37a1f0e
commit
54a1ba0c5c
21 files changed
+8646
-7577
No files matched your search
@@ -2,7 +2,10 @@ import type { Plan, PlanContractLink, PlanDelivery, PlanLoad, PlanStopProduct }
|
||||
import type { PlanFormProductRow } from '@/composables/usePlContractToPlan'
|
||||
import type { BrandOption } from '@/utils/crm-product-brand'
|
||||
import { formatBrandConstraintLabel } from '@/utils/crm-product-brand'
|
||||
import { isPlInternalCustomerName } from '@/utils/pl-internal-customer'
|
||||
import {
|
||||
isPlDibangOptionalVehiclePlate,
|
||||
isPlInternalCustomerName
|
||||
} from '@/utils/pl-internal-customer'
|
||||
|
||||
export interface PlanStopProductFormRow {
|
||||
id?: string
|
||||
@@ -111,27 +114,45 @@ export interface PlanDeliveryForm {
|
||||
products: PlanStopProductFormRow[]
|
||||
}
|
||||
|
||||
/** 地磅勾选仅对内部客户(山峡/云栋)生效:默认勾选且不可改;其他客户默认不勾且不可勾。 */
|
||||
/**
|
||||
* 地磅勾选规则:
|
||||
* - 内部客户(山峡/云栋):默认勾选且不可改
|
||||
* - 地磅可选车(如皖H21522)+ 内部客户:默认不勾,可手动勾选
|
||||
* - 其他客户:默认不勾且不可勾
|
||||
*/
|
||||
export function resolveStopDibangDefaults(
|
||||
customerName?: string | null,
|
||||
stopType: 'load' | 'delivery' = 'load'
|
||||
stopType: 'load' | 'delivery' = 'load',
|
||||
vehiclePlate?: string | null
|
||||
): { generateDibang: number; dibangDirection: string } {
|
||||
if (!isPlInternalCustomerName(customerName)) {
|
||||
return { generateDibang: 0, dibangDirection: 'none' }
|
||||
}
|
||||
if (isPlDibangOptionalVehiclePlate(vehiclePlate)) {
|
||||
return { generateDibang: 0, dibangDirection: 'none' }
|
||||
}
|
||||
if (stopType === 'load') {
|
||||
return { generateDibang: 1, dibangDirection: 'outbound' }
|
||||
}
|
||||
return { generateDibang: 1, dibangDirection: 'inbound' }
|
||||
}
|
||||
|
||||
/** 仅「内部客户 + 地磅可选车」允许用户手动勾选地磅单 */
|
||||
export function canManualToggleStopDibang(
|
||||
customerName?: string | null,
|
||||
vehiclePlate?: string | null
|
||||
): boolean {
|
||||
return isPlInternalCustomerName(customerName) && isPlDibangOptionalVehiclePlate(vehiclePlate)
|
||||
}
|
||||
|
||||
function normalizeStopDibangFieldsFromApi(
|
||||
customerName: string | null | undefined,
|
||||
stopType: 'load' | 'delivery',
|
||||
generateDibang?: number | null,
|
||||
dibangDirection?: string | null
|
||||
dibangDirection?: string | null,
|
||||
vehiclePlate?: string | null
|
||||
): { generateDibang: number; dibangDirection: string } {
|
||||
const defaults = resolveStopDibangDefaults(customerName, stopType)
|
||||
const defaults = resolveStopDibangDefaults(customerName, stopType, vehiclePlate)
|
||||
// 非山峡/云栋:禁止生成地磅单(编辑回填也强制清掉历史勾选)
|
||||
if (!isPlInternalCustomerName(customerName)) {
|
||||
return { generateDibang: 0, dibangDirection: 'none' }
|
||||
@@ -140,7 +161,8 @@ function normalizeStopDibangFieldsFromApi(
|
||||
let direction = (dibangDirection || '').trim()
|
||||
if (gen) {
|
||||
if (direction !== 'outbound' && direction !== 'inbound') {
|
||||
direction = defaults.dibangDirection
|
||||
// 可选车默认 direction 为 none,勾选回填时按段类型补方向
|
||||
direction = stopType === 'load' ? 'outbound' : 'inbound'
|
||||
}
|
||||
} else {
|
||||
direction = 'none'
|
||||
@@ -409,13 +431,17 @@ export function resolveDeliveryViewAddress(
|
||||
return ''
|
||||
}
|
||||
|
||||
export function mapLoadFromApi(load?: PlanLoad | null): PlanLoadForm {
|
||||
export function mapLoadFromApi(
|
||||
load?: PlanLoad | null,
|
||||
vehiclePlate?: string | null
|
||||
): PlanLoadForm {
|
||||
if (!load) return createEmptyLoadForm()
|
||||
const dibang = normalizeStopDibangFieldsFromApi(
|
||||
load.customerName,
|
||||
'load',
|
||||
load.generateDibang,
|
||||
load.dibangDirection
|
||||
load.dibangDirection,
|
||||
vehiclePlate
|
||||
)
|
||||
return {
|
||||
customerId: load.customerId || '',
|
||||
@@ -436,14 +462,18 @@ export function mapLoadFromApi(load?: PlanLoad | null): PlanLoadForm {
|
||||
}
|
||||
}
|
||||
|
||||
export function mapDeliveriesFromApi(deliveries?: PlanDelivery[]): PlanDeliveryForm[] {
|
||||
export function mapDeliveriesFromApi(
|
||||
deliveries?: PlanDelivery[],
|
||||
vehiclePlate?: string | null
|
||||
): PlanDeliveryForm[] {
|
||||
if (!deliveries?.length) return [createEmptyDeliveryForm(1)]
|
||||
return deliveries.map((row, index) => {
|
||||
const dibang = normalizeStopDibangFieldsFromApi(
|
||||
row.customerName,
|
||||
'delivery',
|
||||
row.generateDibang,
|
||||
row.dibangDirection
|
||||
row.dibangDirection,
|
||||
vehiclePlate
|
||||
)
|
||||
return {
|
||||
seq: row.seq ?? index + 1,
|
||||
@@ -471,8 +501,9 @@ export function mapLegacyPlanToStops(plan: Plan): {
|
||||
load: PlanLoadForm
|
||||
deliveries: PlanDeliveryForm[]
|
||||
} {
|
||||
const loadDefaults = resolveStopDibangDefaults(plan.supplierName, 'load')
|
||||
const deliveryDefaults = resolveStopDibangDefaults(plan.customerName, 'delivery')
|
||||
const plate = plan.licensePlate
|
||||
const loadDefaults = resolveStopDibangDefaults(plan.supplierName, 'load', plate)
|
||||
const deliveryDefaults = resolveStopDibangDefaults(plan.customerName, 'delivery', plate)
|
||||
const stopProducts = createStopProductsFromPlanProducts(
|
||||
(plan.products || []).map((item, index) => ({
|
||||
id: item.id,
|
||||
|
||||
Reference in new issue
Block a user