/** * 门店签约合同(CommonResource bizType='CONTRACT')多附件工具。 * * 历史上合同只存单条记录(字段 contractUrl:string),现改为支持多张照片 / PDF。 * 入参同时兼容新的 contractUrls:string[] 与旧的 contractUrl:string。 */ export const MAX_CONTRACT_FILES = 20; /** * 归一化合同附件地址:去空白、去重、限制数量。 * @param urls 新字段 contractUrls * @param legacy 旧字段 contractUrl(仅在 urls 未提供时生效) */ export function normalizeContractUrls( urls?: unknown, legacy?: string | null, ): string[] { const raw: unknown[] = Array.isArray(urls) ? urls : legacy != null ? [legacy] : []; const seen = new Set(); const out: string[] = []; for (const item of raw) { const url = String(item ?? '').trim(); if (!url || seen.has(url)) continue; seen.add(url); out.push(url); if (out.length >= MAX_CONTRACT_FILES) break; } return out; } /** PDF 存 FILE,其余(合同照片)存 IMAGE,便于前端按图片预览 */ export function contractMediaType(url: string): 'FILE' | 'IMAGE' { return /\.pdf(\?|$)/i.test(url) ? 'FILE' : 'IMAGE'; }