修复大量问题
This commit is contained in:
1 parent
8e5cb49da5
commit
59bab33e9b
10 files changed
+270
-114
No files matched your search
@@ -189,6 +189,20 @@ const toRowMap = <TRow extends { id: string }>(rows?: TRow[]) => {
|
||||
return map
|
||||
}
|
||||
|
||||
const parseScopedMajorId = (value: unknown) => {
|
||||
const raw = String(value || '').trim()
|
||||
const scoped = /^\d+::(.+)$/.exec(raw)
|
||||
return (scoped ? String(scoped[1] || '').trim() : raw) || raw
|
||||
}
|
||||
|
||||
const hasScopedScaleRows = (rows?: Array<Record<string, unknown>>) =>
|
||||
(rows || []).some(row => {
|
||||
const id = String(row?.id || '')
|
||||
if (/^\d+::/.test(id)) return true
|
||||
const projectIndex = Number((row as { projectIndex?: unknown })?.projectIndex)
|
||||
return Number.isFinite(projectIndex) && projectIndex > 1
|
||||
})
|
||||
|
||||
const getDefaultConsultCategoryFactor = (serviceId: string | number) => {
|
||||
const service = (getServiceDictById() as Record<string, ServiceLite | undefined>)[String(serviceId)]
|
||||
return toFiniteNumberOrNull(service?.defCoe)
|
||||
@@ -614,6 +628,44 @@ const resolveScaleRows = (
|
||||
return buildDefaultScaleRows(serviceId, consultCategoryFactorMap, majorFactorMap)
|
||||
}
|
||||
|
||||
const normalizeScopedScaleRows = (
|
||||
serviceId: string,
|
||||
rowsFromDb: Array<Record<string, unknown>> | undefined,
|
||||
consultCategoryFactorMap?: Map<string, number | null>,
|
||||
majorFactorMap?: Map<string, number | null>
|
||||
): ScaleRow[] => {
|
||||
const rows = stripGroupScaleRows(rowsFromDb) as Array<Record<string, unknown>>
|
||||
if (rows.length === 0) return []
|
||||
const defaultConsultCategoryFactor =
|
||||
consultCategoryFactorMap?.get(String(serviceId)) ?? getDefaultConsultCategoryFactor(serviceId)
|
||||
|
||||
return rows.map(row => {
|
||||
const parsedMajorId = parseScopedMajorId(row.id)
|
||||
const resolvedMajorId = majorById.has(parsedMajorId) ? parsedMajorId : (majorIdAliasMap.get(parsedMajorId) || parsedMajorId)
|
||||
const hasConsultCategoryFactor = hasOwn(row, 'consultCategoryFactor')
|
||||
const hasMajorFactor = hasOwn(row, 'majorFactor')
|
||||
const hasWorkStageFactor = hasOwn(row, 'workStageFactor')
|
||||
const hasWorkRatio = hasOwn(row, 'workRatio')
|
||||
return {
|
||||
id: resolvedMajorId,
|
||||
amount: toFiniteNumberOrNull(row.amount),
|
||||
landArea: toFiniteNumberOrNull(row.landArea),
|
||||
consultCategoryFactor:
|
||||
toFiniteNumberOrNull(row.consultCategoryFactor) ??
|
||||
(hasConsultCategoryFactor ? null : defaultConsultCategoryFactor),
|
||||
majorFactor:
|
||||
toFiniteNumberOrNull(row.majorFactor) ??
|
||||
(hasMajorFactor ? null : (majorFactorMap?.get(resolvedMajorId) ?? getDefaultMajorFactorById(resolvedMajorId))),
|
||||
workStageFactor:
|
||||
toFiniteNumberOrNull(row.workStageFactor) ??
|
||||
(hasWorkStageFactor ? null : 1),
|
||||
workRatio:
|
||||
toFiniteNumberOrNull(row.workRatio) ??
|
||||
(hasWorkRatio ? null : 100)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 统一生成某合同下某个咨询服务四种计费方式的存储键。
|
||||
// 优先复用 Pinia store 当前约定的 key,避免与旧版 fallback key 脱节。
|
||||
export const getPricingMethodDetailDbKeys = (
|
||||
@@ -778,6 +830,14 @@ export const getPricingMethodTotalsForService = async (params: {
|
||||
|
||||
// 优先使用对应计费页的数据;不存在时回退合同段规模信息,再回退默认字典行。
|
||||
const excludeInvestmentCostAndAreaRows = params.options?.excludeInvestmentCostAndAreaRows === true
|
||||
const investScaleRowsSource = stripGroupScaleRows(investData?.detailRows as Array<Record<string, unknown>> | undefined)
|
||||
const landScaleRowsSource = stripGroupScaleRows(landData?.detailRows as Array<Record<string, unknown>> | undefined)
|
||||
const scopedInvestRows = hasScopedScaleRows(investScaleRowsSource)
|
||||
? normalizeScopedScaleRows(serviceId, investScaleRowsSource, consultCategoryFactorMap, majorFactorMap)
|
||||
: null
|
||||
const scopedLandRows = hasScopedScaleRows(landScaleRowsSource)
|
||||
? normalizeScopedScaleRows(serviceId, landScaleRowsSource, consultCategoryFactorMap, majorFactorMap)
|
||||
: null
|
||||
const investScale = onlyCostScale
|
||||
? getOnlyCostScaleBudgetFee(
|
||||
serviceId,
|
||||
@@ -788,7 +848,7 @@ export const getPricingMethodTotalsForService = async (params: {
|
||||
industryId
|
||||
)
|
||||
: (() => {
|
||||
const investRows = resolveScaleRows(
|
||||
const investRows = scopedInvestRows || resolveScaleRows(
|
||||
serviceId,
|
||||
investData,
|
||||
htData,
|
||||
@@ -802,7 +862,7 @@ export const getPricingMethodTotalsForService = async (params: {
|
||||
})
|
||||
})()
|
||||
|
||||
const landRows = resolveScaleRows(
|
||||
const landRows = scopedLandRows || resolveScaleRows(
|
||||
serviceId,
|
||||
landData,
|
||||
htData,
|
||||
|
||||
Reference in new issue
Block a user