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:
parent
54386e9710
commit
7054390dcb
|
|
@ -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}
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Reference in New Issue