JGJS2026/src/types/pricing.ts
2026-03-18 18:46:58 +08:00

263 lines
6.9 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* 咨询服务计价体系 - 统一类型定义
*
* 本文件集中定义所有计价相关的接口和类型,
* 供 zxFw 主表、4个计价法组件、Store、计算模块共用。
*/
/* ----------------------------------------------------------------
* 计价方法枚举
* ---------------------------------------------------------------- */
/** 4种计价方法字段名对应 zxFw 主表列) */
export type PricingMethodField = 'investScale' | 'landScale' | 'workload' | 'hourly'
/** 规模法类型:投资规模 / 用地规模 */
export type ScaleType = 'invest' | 'land'
/** 合同附加费用计费方式 */
export type HtFeeMethodType = 'rate-fee' | 'hourly-fee' | 'quantity-unit-price-fee'
/* ----------------------------------------------------------------
* zxFw 主表行(咨询服务汇总)
* ---------------------------------------------------------------- */
/** zxFw 主表每行数据 —— 一个咨询服务的4种计价法汇总 */
export interface ZxFwDetailRow {
id: string
code?: string
name?: string
/** 是否参与流程1=参与, 0=不参与, null=固定行) */
process?: number | null
investScale: number | null
landScale: number | null
workload: number | null
hourly: number | null
/** 4种计价法小计 */
subtotal?: number | null
/** 最终费用 */
finalFee?: number | null
actions?: unknown
}
/** zxFw 主表状态(一个合同的全部咨询服务) */
export interface ZxFwState {
selectedIds?: string[]
selectedCodes?: string[]
detailRows: ZxFwDetailRow[]
}
/* ----------------------------------------------------------------
* 计价法明细状态(通用容器)
* ---------------------------------------------------------------- */
/** 单个计价法的明细状态 */
export interface ServicePricingMethodState<TRow = unknown> {
detailRows: TRow[]
projectCount?: number | null
}
/** 一个咨询服务的全部计价法状态 */
export interface ServicePricingState {
investScale?: ServicePricingMethodState
landScale?: ServicePricingMethodState
workload?: ServicePricingMethodState
hourly?: ServicePricingMethodState
}
/* ----------------------------------------------------------------
* 规模法明细行(投资规模法 + 用地规模法共用)
* ---------------------------------------------------------------- */
/** 规模法 AG Grid 行数据 */
export interface ScaleDetailRow {
id: string
projectIndex?: number
majorDictId?: string
groupCode: string
groupName: string
majorCode: string
majorName: string
hasCost: boolean
hasArea: boolean
amount: number | null
landArea: number | null
benchmarkBudget: number | null
benchmarkBudgetBasic: number | null
benchmarkBudgetOptional: number | null
benchmarkBudgetBasicChecked: boolean
benchmarkBudgetOptionalChecked: boolean
basicFormula: string | null
optionalFormula: string | null
consultCategoryFactor: number | null
majorFactor: number | null
workStageFactor: number | null
workRatio: number | null
budgetFee: number | null
budgetFeeBasic: number | null
budgetFeeOptional: number | null
remark: string
path: string[]
}
/** 规模法计算用精简行pricingMethodTotals 使用) */
export interface ScaleCalcRow {
id: string
amount: number | null
landArea: number | null
consultCategoryFactor: number | null
majorFactor: number | null
workStageFactor: number | null
workRatio: number | null
}
/* ----------------------------------------------------------------
* 工作量法明细行
* ---------------------------------------------------------------- */
/** 工作量法 AG Grid 行数据 */
export interface WorkloadDetailRow {
id: string
taskCode: string
taskName: string
unit: string
conversion: number | null
workload: number | null
basicFee: number | null
budgetBase: string
budgetReferenceUnitPrice: string
budgetAdoptedUnitPrice: number | null
consultCategoryFactor: number | null
serviceFee: number | null
remark: string
path: string[]
}
/** 工作量法计算用精简行 */
export interface WorkloadCalcRow {
id: string
conversion: number | null
workload: number | null
basicFee: number | null
budgetAdoptedUnitPrice: number | null
consultCategoryFactor: number | null
}
/* ----------------------------------------------------------------
* 工时法明细行
* ---------------------------------------------------------------- */
/** 工时法 AG Grid 行数据 */
export interface HourlyDetailRow {
id: string
adoptedBudgetUnitPrice: number | null
personnelCount: number | null
workdayCount: number | null
}
/* ----------------------------------------------------------------
* 计价汇总结果
* ---------------------------------------------------------------- */
/** 4种计价法的汇总金额 */
export interface PricingMethodTotals {
investScale: number | null
landScale: number | null
workload: number | null
hourly: number | null
}
/* ----------------------------------------------------------------
* 合同附加费用
* ---------------------------------------------------------------- */
/** 合同附加费用主表状态 */
export interface HtFeeMainState<TRow = unknown> {
detailRows: TRow[]
}
/** 合同附加费用子方法载荷 */
export type HtFeeMethodPayload = unknown
/* ----------------------------------------------------------------
* 字典相关
* ---------------------------------------------------------------- */
/** 专业字典叶子节点 */
export interface MajorDictLeaf {
id: string
code: string
name: string
hasCost: boolean
hasArea: boolean
}
/** 专业字典分组 */
export interface MajorDictGroup {
id: string
code: string
name: string
children: MajorDictLeaf[]
}
/** 专业字典精简信息 */
export interface MajorLite {
code: string
name: string
defCoe: number | null
hasCost?: boolean
hasArea?: boolean
industryId?: string | number | null
}
/** 咨询服务字典精简信息 */
export interface ServiceLite {
defCoe: number | null
onlyCostScale?: boolean | null
mutiple?: boolean | null
}
/** 工作量法任务字典 */
export interface TaskLite {
serviceID: number
code?: string
ref?: string
name: string
basicParam: string
unit: string
conversion: number | null
maxPrice: number | null
minPrice: number | null
defPrice: number | null
desc: string | null
}
/** 工时法专家字典 */
export interface ExpertLite {
defPrice: number | null
manageCoe: number | null
}
/* ----------------------------------------------------------------
* 持久化相关
* ---------------------------------------------------------------- */
/** 存储的明细行状态(通用) */
export interface StoredDetailRowsState<T = unknown> {
detailRows?: T[]
}
/** 存储的系数状态 */
export interface StoredFactorState {
detailRows?: Array<{
id: string
standardFactor?: number | null
budgetValue?: number | null
}>
}
/** 项目基础信息 */
export interface XmBaseInfoState {
projectIndustry?: string
}