import { getSession } from '@/services/api.uts' import { validRecordId, MatchDetail, MatchReason } from './matches.uts' let scope = '' let selected: string[] = [] export function parseCompareIds(raw: string): string[] { if (raw.length == 0) return [] const ids = raw.split(',') if (ids.length > 3) throw new Error('每次最多对比3个产品,请返回重新选择。') const seen: string[] = [] ids.forEach((id: string) => { if (!validRecordId(id) || seen.includes(id)) throw new Error('对比产品编号无效或重复,请返回重新选择。') seen.push(id) }) return ids } // 只缓存少量选择ID,不持久化产品或个人事实;换账号、会话或评估后立即隔离。 export function compareSelection(assessmentId: string): string[] { const session = getSession() const key = session == null ? '' : (session.getString('userId') ?? '') + ':' + (session.getString('token') ?? '') + ':' + assessmentId if (key != scope || key.length == 0) { scope = key; selected = [] } return selected.slice() } export function saveCompareSelection(assessmentId: string, ids: string[]): void { compareSelection(assessmentId) selected = parseCompareIds(ids.join(',')) } export function compareQuery(assessmentId: string, ids: string[]): string { return '?assessmentId=' + encodeURIComponent(assessmentId) + '&productIds=' + ids.join(',') } export function sameMatchSnapshot(a: MatchDetail, b: MatchDetail): boolean { return a.assessmentId == b.assessmentId && a.resultVersion == b.resultVersion && a.snapshotId == b.snapshotId && a.ruleVersion == b.ruleVersion && a.orderingVersion == b.orderingVersion } export function compareReasonText(reasons: MatchReason[], empty: string): string { return reasons.length == 0 ? empty : reasons.map((r: MatchReason): string => r.text + '\n' + r.evidence.join('\n')).join('\n\n') }