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">
|
<Panel className="space-y-4 p-5">
|
||||||
<CollapsibleOrderComposition order={order} />
|
<CollapsibleOrderComposition order={order} />
|
||||||
</Panel>
|
</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) ? (
|
{userRole !== "driver" && (order?.driver_shipment_data || order?.driverShipmentData) ? (
|
||||||
<DriverShipmentReport shipmentData={order.driver_shipment_data || order.driverShipmentData} />
|
<DriverShipmentReport shipmentData={order.driver_shipment_data || order.driverShipmentData} />
|
||||||
) : null}
|
) : null}
|
||||||
|
|
|
||||||
|
|
@ -225,6 +225,7 @@ export const mapOrderGroupRowToDeliveryGroup = (row) => {
|
||||||
deliveryProblemNote: row.delivery_problem_note || null,
|
deliveryProblemNote: row.delivery_problem_note || null,
|
||||||
pickupCode: row.pickup_code || null,
|
pickupCode: row.pickup_code || null,
|
||||||
syncedTo1cAt: row.synced_to_1c_at || null,
|
syncedTo1cAt: row.synced_to_1c_at || null,
|
||||||
|
deliveryLink: row.delivery_link || null,
|
||||||
deliveryHalfDay: getOrderGroupDeliveryHalfDay({
|
deliveryHalfDay: getOrderGroupDeliveryHalfDay({
|
||||||
deliveryHalfDay: rawDeliveryHalfDay,
|
deliveryHalfDay: rawDeliveryHalfDay,
|
||||||
deliveryTime: rawDeliveryTime,
|
deliveryTime: rawDeliveryTime,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue