59 lines
2.0 KiB
TypeScript
59 lines
2.0 KiB
TypeScript
/**
|
||
* Маппинг slug'ов lead_statuses → стилевые токены пилюли.
|
||
* Slugs синхронизированы с db/schema.sql:2076 (источник истины).
|
||
*
|
||
* Spec §8. Используется компонентом StatusPill.vue.
|
||
*/
|
||
export interface PillStyle {
|
||
bg: string;
|
||
color: string;
|
||
fontWeight?: number;
|
||
textDecoration?: 'line-through' | 'none';
|
||
}
|
||
|
||
export const STATUS_PILL_SLUGS = [
|
||
'new',
|
||
'viewed',
|
||
'in_progress',
|
||
'callback',
|
||
'quality',
|
||
'meeting_set',
|
||
'won',
|
||
'lost',
|
||
'refund',
|
||
'duplicate',
|
||
'junk',
|
||
'no_answer',
|
||
'cancelled',
|
||
'closed',
|
||
'postponed',
|
||
'archived',
|
||
] as const;
|
||
|
||
type StatusPillSlug = (typeof STATUS_PILL_SLUGS)[number];
|
||
|
||
const STYLES: Record<StatusPillSlug, PillStyle> = {
|
||
new: { bg: 'rgba(15,110,86,0.12)', color: '#0F6E56' },
|
||
viewed: { bg: 'rgba(122,91,163,0.15)', color: '#7A5BA3' },
|
||
in_progress: { bg: 'rgba(63,124,149,0.12)', color: '#2A5A6E' },
|
||
callback: { bg: 'rgba(217,164,65,0.18)', color: '#A07820' },
|
||
quality: { bg: 'rgba(46,139,87,0.15)', color: '#2E8B57' },
|
||
meeting_set: { bg: 'rgba(122,91,163,0.15)', color: '#7A5BA3' },
|
||
won: { bg: 'rgba(46,139,87,0.22)', color: '#1F6940', fontWeight: 600 },
|
||
lost: { bg: 'rgba(107,99,86,0.18)', color: '#6B6356' },
|
||
refund: { bg: 'rgba(204,110,80,0.15)', color: '#B0563D' },
|
||
duplicate: { bg: 'rgba(1,32,25,0.08)', color: '#3A3A3A' },
|
||
junk: { bg: 'rgba(184,58,58,0.10)', color: '#B83A3A' },
|
||
no_answer: { bg: 'rgba(107,99,86,0.15)', color: '#6B6356' },
|
||
cancelled: { bg: 'rgba(107,99,86,0.18)', color: '#6B6356', textDecoration: 'line-through' },
|
||
closed: { bg: 'rgba(1,32,25,0.10)', color: '#3A3A3A' },
|
||
postponed: { bg: 'rgba(15,110,86,0.06)', color: '#6B6356' },
|
||
archived: { bg: '#012019', color: '#E8E2D4' },
|
||
};
|
||
|
||
const FALLBACK: PillStyle = { bg: 'rgba(1,32,25,0.08)', color: '#3A3A3A' };
|
||
|
||
export function useStatusPill(slug: string): PillStyle {
|
||
return STYLES[slug as StatusPillSlug] ?? FALLBACK;
|
||
}
|