export const STORAGE_KEYS = { brands: 'pdd_pricing_brand_configs_v1', }; // 比例类字段默认值(小数存储,页面以百分比展示) export const PLATFORM_COMMISSION_RATES = Object.freeze({ standard: 0.015, blackLabel: 0.06, }); export const getPlatformCommissionRate = (isBlackLabelShop) => ( isBlackLabelShop ? PLATFORM_COMMISSION_RATES.blackLabel : PLATFORM_COMMISSION_RATES.standard ); export const inferBlackLabelShop = (rows = []) => { const commission = rows .map((row) => row?.commission ?? row?.savedPricing?.commission) .map((value) => toFiniteNumber(value)) .find((value) => value !== null); return commission !== undefined && Math.abs(commission - PLATFORM_COMMISSION_RATES.blackLabel) < 1e-9; }; export const DEFAULT_RATES = { commission: PLATFORM_COMMISSION_RATES.standard, // 平台佣金:黑标店铺 6% / 非黑标 1.5% adFee: 0.025, // 营销广告费 seeding: 0.005, // 种菜占比 afterSale: 0.05, // 售后费用 insurance: 0.05, // 保险费 brandFee: 0, // 品牌使用费:默认 0,按条码前缀自动判断(见 deriveBrandFromBarcode) targetMargin: 0.15, // 营业利润率(目标值) }; // 条码前缀规则:GBGJ- 顾家(品牌使用费 7%)、GBSFY- 索菲亚(6%)、其余简尚(0) export const BARCODE_BRAND_RULES = [ { prefix: 'GBGJ-', brand: '顾家', brandFee: 0.07 }, { prefix: 'GBSFY-', brand: '索菲亚', brandFee: 0.06 }, ]; export const deriveBrandFromBarcode = (barcode) => { const code = String(barcode || '').trim().toUpperCase(); const matched = BARCODE_BRAND_RULES.find((rule) => code.startsWith(rule.prefix)); return matched ? { brand: matched.brand, brandFee: matched.brandFee } : { brand: '简尚', brandFee: 0 }; }; // 系统兜底默认值(运营未保存个性化默认值配置时使用,见 DefaultsConfigModal) export const SYSTEM_DEFAULTS = { coupon: 20, // 优惠券金额 activityDiscount: 0.6, // 活动折扣(即 6 折) installFee: 0, // 安装费 targetMargin: 0.15, // 营业利润率 }; export const SOURCE_LABELS = { getJstSkusBySpu: '聚水潭实时接口', }; export const formatSourceLabel = (source) => { if (!source) return '-'; return SOURCE_LABELS[source] || `本地快照(${source})`; }; export const createRowId = () => `${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`; const toFiniteNumber = (value) => { if (value === null || value === undefined || value === '') return null; const num = Number(value); return Number.isFinite(num) ? num : null; }; /** * 由 SPU 条码行生成测算行: * 条码/图片/尺寸/颜色/成本/公司限价自动填入;运费优先取运费画像的全国运费; * 售后占比优先取画像值;到手价默认取公司限价(无限价时取成本价的 2 倍,均可改); * 品牌与品牌使用费按条码前缀自动判断(GBGJ- 顾家 7% / GBSFY- 索菲亚 6% / 其余简尚 0)。 */ export const createRowFromSku = (sku, { freightProfile, defaults, commission } = {}) => { const minimumPrices = freightProfile?.minimumPricesBySku || {}; const freightMinimum = minimumPrices[sku.skuCode] ?? minimumPrices[String(sku.skuCode || '').toUpperCase()] ?? minimumPrices[String(sku.skuCode || '').toLowerCase()]; const { brand, brandFee } = deriveBrandFromBarcode(sku.skuCode); const priceLimit = toFiniteNumber(freightMinimum ?? sku.minimumPrice); const cost = toFiniteNumber(sku.cost); return { id: createRowId(), barcode: sku.skuCode || '', skuStatus: sku.status || '', stock: toFiniteNumber(sku.stock), stockWarehouses: Array.isArray(sku.stockWarehouses) ? sku.stockWarehouses : [], originalSkuName: sku.savedPricing?.originalSkuName || sku.name || '', selectedSkuName: sku.savedPricing?.selectedSkuName || sku.name || '', name: sku.savedPricing?.selectedSkuName || sku.name || '', internalProductCode: sku.savedPricing?.internalProductCode || '', productCodeProductName: sku.savedPricing?.productCodeProductName || '', productCodeColorSpec: sku.savedPricing?.productCodeColorSpec || '', imageUrl: sku.image || '', size: sku.size || '', color: sku.color || '', supplier: sku.supplier || '', category: sku.category || '', lengthCm: toFiniteNumber(sku.lengthCm), widthCm: toFiniteNumber(sku.widthCm), heightCm: toFiniteNumber(sku.heightCm), weight: toFiniteNumber(sku.weight), brand, companyPriceLimit: priceLimit, salePrice: toFiniteNumber(sku.salePrice), price: toFiniteNumber(sku.savedPricing?.price) ?? toFiniteNumber(sku.savedPricing?.groupPrice) // 早期自动上架只存了拼单价,兜底还原为到手价 ?? priceLimit ?? (cost === null ? null : cost * 2), // L 到手价(默认取公司限价,无限价时取成本价的 2 倍,可改) // 默认值优先级:选品已存价 > 用户个性化配置 > 系统默认(券 20 / 折扣 0.6 / 安装费 0 / 利润率 15%) installFee: toFiniteNumber(sku.savedPricing?.installFee) ?? toFiniteNumber(defaults?.installFee) ?? 0, coupon: toFiniteNumber(sku.savedPricing?.coupon) ?? toFiniteNumber(defaults?.coupon) ?? 20, activityDiscount: toFiniteNumber(sku.savedPricing?.activityDiscount) ?? toFiniteNumber(defaults?.activityDiscount) ?? 0.6, cost, // N 成本 // O 运费:优先取接口按条码返回的全国平均运费(qgyf),其次运费画像的全国运费 shipping: toFiniteNumber(sku.savedPricing?.shipping) ?? toFiniteNumber(sku.freight) ?? toFiniteNumber(freightProfile?.nationalFreight), ...DEFAULT_RATES, commission: toFiniteNumber(commission) ?? toFiniteNumber(sku.savedPricing?.commission) ?? DEFAULT_RATES.commission, adFee: toFiniteNumber(sku.savedPricing?.adFee) ?? DEFAULT_RATES.adFee, seeding: toFiniteNumber(sku.savedPricing?.seeding) ?? DEFAULT_RATES.seeding, afterSale: toFiniteNumber(sku.savedPricing?.afterSale) ?? DEFAULT_RATES.afterSale, insurance: toFiniteNumber(sku.savedPricing?.insurance) ?? DEFAULT_RATES.insurance, targetMargin: toFiniteNumber(sku.savedPricing?.targetMargin) ?? toFiniteNumber(defaults?.targetMargin) ?? DEFAULT_RATES.targetMargin, brandFee: toFiniteNumber(sku.savedPricing?.brandFee) ?? brandFee, }; };