feat: add delivery link panel in OrderDetail for non-driver roles

- Map delivery_link DB field to deliveryLink in order group object
- New panel in OrderDetailPanel: 'Ссылка на согласование'
- Two buttons: open approval page (link) + copy link to clipboard
- Visible for all roles except driver
- Shows when order.deliveryLink is present
This commit is contained in:
root 2026-06-18 15:15:43 +00:00
parent 54386e9710
commit 7054390dcb
2 changed files with 42 additions and 0 deletions

View File

@ -1179,6 +1179,47 @@ export const OrderDetailPanel = ({
<Panel className="space-y-4 p-5">
<CollapsibleOrderComposition order={order} />
</Panel>
{userRole !== "driver" && order?.deliveryLink ? (
<Panel className="space-y-3 p-5">
<strong>Ссылка на согласование</strong>
<p className="text-sm text-[var(--color-text-muted)]">
Отправьте эту ссылку клиенту, чтобы он мог согласовать доставку или самовывоз самостоятельно.
</p>
<div className="flex flex-wrap items-center gap-2">
<a
href={order.deliveryLink}
target="_blank"
rel="noopener noreferrer"
className="inline-flex items-center gap-1.5 rounded-2xl bg-[var(--color-accent)] px-4 py-2.5 text-sm font-semibold text-white transition hover:opacity-90"
>
<svg className="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth={2}>
<path strokeLinecap="round" strokeLinejoin="round" d="M13.828 10.172a4 4 0 00-5.656 0l-4 4a4 4 0 105.656 5.656l1.102-1.101m-.758-4.899a4 4 0 005.656 0l4-4a4 4 0 00-5.656-5.656l-1.1 1.1" />
</svg>
Открыть страницу согласования
</a>
<Button
variant="secondary"
onClick={() => {
navigator.clipboard?.writeText(order.deliveryLink).then(() => {
setFormMessage("Ссылка скопирована в буфер обмена");
setTimeout(() => setFormMessage(""), 3000);
}).catch(() => {
setFormMessage("Не удалось скопировать ссылку");
});
}}
>
<span className="inline-flex items-center gap-1.5">
<svg className="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth={2}>
<path strokeLinecap="round" strokeLinejoin="round" d="M8 5H6a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2v-1M8 5a2 2 0 002 2h2a2 2 0 002-2M8 5a2 2 0 012-2h2a2 2 0 012 2m0 0h2a2 2 0 012 2v3m2 4H10m0 0l3-3m-3 3l3 3" />
</svg>
Скопировать ссылку
</span>
</Button>
</div>
</Panel>
) : null}
{userRole !== "driver" && (order?.driver_shipment_data || order?.driverShipmentData) ? (
<DriverShipmentReport shipmentData={order.driver_shipment_data || order.driverShipmentData} />
) : null}

View File

@ -225,6 +225,7 @@ export const mapOrderGroupRowToDeliveryGroup = (row) => {
deliveryProblemNote: row.delivery_problem_note || null,
pickupCode: row.pickup_code || null,
syncedTo1cAt: row.synced_to_1c_at || null,
deliveryLink: row.delivery_link || null,
deliveryHalfDay: getOrderGroupDeliveryHalfDay({
deliveryHalfDay: rawDeliveryHalfDay,
deliveryTime: rawDeliveryTime,