updates on the login page and order page and fixed on the logo and the date validation
This commit is contained in:
@@ -163,7 +163,7 @@ const Login = () => {
|
|||||||
overflow: 'hidden',
|
overflow: 'hidden',
|
||||||
flexBasis: '46%',
|
flexBasis: '46%',
|
||||||
flexDirection: 'column',
|
flexDirection: 'column',
|
||||||
justifyContent: 'space-between',
|
justifyContent: 'center',
|
||||||
color: '#fff',
|
color: '#fff',
|
||||||
p: 6,
|
p: 6,
|
||||||
background: 'linear-gradient(150deg, #4D1C61 0%, #662582 52%, #9255AB 100%)'
|
background: 'linear-gradient(150deg, #4D1C61 0%, #662582 52%, #9255AB 100%)'
|
||||||
@@ -193,54 +193,39 @@ const Login = () => {
|
|||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<Box sx={{ position: 'relative' }}>
|
<Box sx={{ position: 'relative', maxWidth: 430 }}>
|
||||||
<Box
|
|
||||||
sx={{
|
|
||||||
bgcolor: '#fff',
|
|
||||||
borderRadius: 2,
|
|
||||||
px: 1.5,
|
|
||||||
py: 0.75,
|
|
||||||
display: 'inline-flex',
|
|
||||||
boxShadow: '0 8px 20px rgba(0,0,0,0.18)'
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
<img src={logo} alt="NearlExpress" style={{ height: 30, display: 'block' }} />
|
|
||||||
</Box>
|
|
||||||
</Box>
|
|
||||||
|
|
||||||
<Box sx={{ position: 'relative' }}>
|
|
||||||
<Typography sx={{ fontSize: 34, fontWeight: 700, lineHeight: 1.18, letterSpacing: '-0.02em', mb: 2 }}>
|
<Typography sx={{ fontSize: 34, fontWeight: 700, lineHeight: 1.18, letterSpacing: '-0.02em', mb: 2 }}>
|
||||||
Operate your dispatch,
|
Operate your dispatch,
|
||||||
<br />
|
<br />
|
||||||
end to end.
|
end to end.
|
||||||
</Typography>
|
</Typography>
|
||||||
<Typography sx={{ fontSize: 16, color: 'rgba(255,255,255,0.82)', maxWidth: 430, lineHeight: 1.6 }}>
|
<Typography sx={{ fontSize: 16, color: 'rgba(255,255,255,0.82)', mb: 4, lineHeight: 1.6 }}>
|
||||||
Orders, AI route optimisation, live rider tracking and billing — all in the NearlExpress operator console.
|
Orders, AI route optimisation, live rider tracking and billing — all in the NearlExpress operator console.
|
||||||
</Typography>
|
</Typography>
|
||||||
</Box>
|
|
||||||
|
|
||||||
<Stack spacing={1.25} sx={{ position: 'relative' }}>
|
<Stack spacing={1.5} sx={{ display: 'inline-flex', textAlign: 'left' }}>
|
||||||
{['Real-time fleet visibility', 'AI-optimised dispatch routes', 'Tenant, pricing & invoice control'].map((t) => (
|
{['Real-time fleet visibility', 'AI-optimised dispatch routes', 'Tenant, pricing & invoice control'].map((t) => (
|
||||||
<Stack key={t} direction="row" spacing={1.25} alignItems="center">
|
<Stack key={t} direction="row" spacing={1.25} alignItems="center">
|
||||||
<Box
|
<Box
|
||||||
sx={{
|
sx={{
|
||||||
width: 22,
|
width: 22,
|
||||||
height: 22,
|
height: 22,
|
||||||
borderRadius: '50%',
|
borderRadius: '50%',
|
||||||
bgcolor: 'rgba(255,255,255,0.18)',
|
bgcolor: 'rgba(255,255,255,0.18)',
|
||||||
display: 'inline-flex',
|
display: 'inline-flex',
|
||||||
alignItems: 'center',
|
alignItems: 'center',
|
||||||
justifyContent: 'center',
|
justifyContent: 'center',
|
||||||
fontSize: 13,
|
fontSize: 13,
|
||||||
fontWeight: 700
|
fontWeight: 700
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
✓
|
✓
|
||||||
</Box>
|
</Box>
|
||||||
<Typography sx={{ fontSize: 14.5, color: 'rgba(255,255,255,0.9)' }}>{t}</Typography>
|
<Typography sx={{ fontSize: 14.5, color: 'rgba(255,255,255,0.9)' }}>{t}</Typography>
|
||||||
</Stack>
|
</Stack>
|
||||||
))}
|
))}
|
||||||
</Stack>
|
</Stack>
|
||||||
|
</Box>
|
||||||
</Box>
|
</Box>
|
||||||
|
|
||||||
{/* ---- Right form panel ---- */}
|
{/* ---- Right form panel ---- */}
|
||||||
|
|||||||
@@ -206,6 +206,16 @@ const ORDERS_STATUS_TABS = [
|
|||||||
{ idx: 3, status: 'cancelled', label: 'Cancelled', color: '#ef4444', icon: MdCancel, countKey: 'cancelled' }
|
{ idx: 3, status: 'cancelled', label: 'Cancelled', color: '#ef4444', icon: MdCancel, countKey: 'cancelled' }
|
||||||
];
|
];
|
||||||
|
|
||||||
|
const formatOrderDate = (row) => {
|
||||||
|
const dateCandidates = [row.pickupslot, row.deliverydate, row.orderdate];
|
||||||
|
for (const candidate of dateCandidates) {
|
||||||
|
if (candidate && dayjs(candidate).isValid()) {
|
||||||
|
return `${dayjs(candidate).utc().format('DD/MM/YYYY')} ${dayjs(candidate).format('hh:mm A')}`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return '—';
|
||||||
|
};
|
||||||
|
|
||||||
const Orders = () => {
|
const Orders = () => {
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
const isMobile = useMediaQuery(theme.breakpoints.down('md'));
|
const isMobile = useMediaQuery(theme.breakpoints.down('md'));
|
||||||
@@ -1469,7 +1479,7 @@ const Orders = () => {
|
|||||||
{`${row.locationname}-(${row.locationsuburb})`}
|
{`${row.locationname}-(${row.locationsuburb})`}
|
||||||
</Typography>
|
</Typography>
|
||||||
<Typography variant="caption" sx={{ color: DT.textSecondary }}>
|
<Typography variant="caption" sx={{ color: DT.textSecondary }}>
|
||||||
{row.orderid} · {dayjs(row.pickupslot).utc().format('DD/MM/YYYY')} {dayjs(row.pickupslot).format('hh:mm A')}
|
{row.orderid} · {formatOrderDate(row)}
|
||||||
</Typography>
|
</Typography>
|
||||||
</MobileField>
|
</MobileField>
|
||||||
<MobileField label="Pickup">
|
<MobileField label="Pickup">
|
||||||
@@ -1691,7 +1701,7 @@ const Orders = () => {
|
|||||||
</Tooltip>
|
</Tooltip>
|
||||||
<Tooltip title="Pickup Slot">
|
<Tooltip title="Pickup Slot">
|
||||||
<Typography noWrap sx={{ fontSize: '12px' }}>
|
<Typography noWrap sx={{ fontSize: '12px' }}>
|
||||||
{dayjs(row.pickupslot).utc().format('DD/MM/YYYY')} {dayjs(row.pickupslot).format('hh:mm A')}
|
{formatOrderDate(row)}
|
||||||
</Typography>
|
</Typography>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
</TableCell>
|
</TableCell>
|
||||||
|
|||||||
Reference in New Issue
Block a user