refactor(insurance): merge pricing into contracts (basic+supp groups)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
hamed
2026-06-23 20:55:56 +03:30
co-authored by Claude Opus 4.8
parent 18ae55ac30
commit c556f3a53d
4 changed files with 129 additions and 184 deletions
@@ -168,28 +168,38 @@ export default function TenantInsuranceContracts() {
هنوز با هیچ بیمهای قرارداد فعال ندارید.
</div>
) : (
<div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>
{contracts.map((c: Contract) => (
<div key={c.uuid} style={{ display: 'flex', alignItems: 'center', gap: 12, padding: '10px 12px', borderRadius: 10, border: '1px solid var(--border)' }}>
<div style={{ flex: 1, minWidth: 0 }}>
<div style={{ fontWeight: 600, fontSize: 13.5 }}>
{c.insurance_name ?? `#${c.insurance_id}`}
{c.insurance_kind && <span className="badge gray" style={{ fontSize: 10, marginInlineStart: 6 }}>{KIND_LABEL[c.insurance_kind] ?? c.insurance_kind}</span>}
<div style={{ display: 'flex', flexDirection: 'column', gap: 18 }}>
{(['basic', 'supplementary'] as const).map((kind) => {
const group = contracts.filter((c: Contract) => c.insurance_kind === kind);
if (group.length === 0) return null;
return (
<div key={kind}>
<div style={{ fontSize: 12.5, fontWeight: 700, color: 'var(--text-2)', marginBottom: 8 }}>
بیمه {KIND_LABEL[kind]}
</div>
<div style={{ fontSize: 11.5, color: 'var(--text-3)', marginTop: 2 }}>
پوشش {c.coverage_percent}٪
{c.franchise_rials > 0 && ` · فرانشیز ${formatRial(c.franchise_rials)}`}
{c.annual_ceiling_rials != null && ` · سقف ${formatRial(c.annual_ceiling_rials)}`}
<div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>
{group.map((c: Contract) => (
<div key={c.uuid} style={{ display: 'flex', alignItems: 'center', gap: 12, padding: '10px 12px', borderRadius: 10, border: '1px solid var(--border)' }}>
<div style={{ flex: 1, minWidth: 0 }}>
<div style={{ fontWeight: 600, fontSize: 13.5 }}>{c.insurance_name ?? `#${c.insurance_id}`}</div>
<div style={{ fontSize: 11.5, color: 'var(--text-3)', marginTop: 2 }}>
پوشش {c.coverage_percent}٪
{c.franchise_rials > 0 && ` · فرانشیز ${formatRial(c.franchise_rials)}`}
{c.annual_ceiling_rials != null && ` · سقف ${formatRial(c.annual_ceiling_rials)}`}
</div>
</div>
<button className="mini-btn" title="ویرایش" onClick={() => openEdit(c)}>
<PencilIcon style={{ width: 15 }} />
</button>
<button className="mini-btn danger" title="غیرفعال‌سازی" disabled={delMut.isPending} onClick={() => delMut.mutate(c.uuid)}>
<TrashIcon style={{ width: 15 }} />
</button>
</div>
))}
</div>
</div>
<button className="mini-btn" title="ویرایش" onClick={() => openEdit(c)}>
<PencilIcon style={{ width: 15 }} />
</button>
<button className="mini-btn danger" title="غیرفعال‌سازی" disabled={delMut.isPending} onClick={() => delMut.mutate(c.uuid)}>
<TrashIcon style={{ width: 15 }} />
</button>
</div>
))}
);
})}
</div>
)}
</div>