Artifact 806c91687cc69f1b2f35e74331729888f6d00133024f0a5864a17147471cbb6f:
- File
web/src/App.tsx
— part of check-in
[bee9efb316]
at
2026-10-23 06:37:04
on branch trunk
— 同一仓库内移库,并留下波次已占用的数量
- 把一个批次从源库位转到启用的目标库位,库存立刻变更 - 未完成波次占用的数量不能移走,撤销波次后才能继续移 - 移库记录留在本地,不写回来肯 (user: pluto size: 3327)
import type { ReactNode } from 'react' import { Navigate, Route, Routes } from 'react-router-dom' import { can } from './api' import { Account } from './pages/Account' import { Audit } from './pages/Audit' import { Dashboard } from './pages/Dashboard' import { Documents } from './pages/Documents' import { Inventory } from './pages/Inventory' import { Locations } from './pages/Locations' import { Moves } from './pages/Moves' import { Login } from './pages/Login' import { Orders } from './pages/Orders' import { Putaway } from './pages/Putaway' import { Products } from './pages/Products' import { Shell } from './pages/Shell' import { Users } from './pages/Users' import { Waves } from './pages/Waves' import { Warehouses } from './pages/Warehouses' import { useSession } from './session' function Guard({ permission, children, }: { permission?: string children: ReactNode }) { const { user } = useSession() if (permission && !can(user, permission)) { return <p className="empty">没有权限查看此页面</p> } return children } export function App() { const { user, loading } = useSession() if (loading) return <p className="empty">正在确认登录状态…</p> return ( <Routes> <Route path="/login" element={user ? <Navigate to="/" replace /> : <Login />} /> <Route element={user ? <Shell /> : <Navigate to="/login" replace />}> <Route index element={<Dashboard />} /> <Route path="account" element={<Account />} /> <Route path="warehouses" element={<Guard permission="warehouse.view"><Warehouses /></Guard>} /> <Route path="locations" element={<Guard permission="location.view"><Locations /></Guard>} /> <Route path="products" element={<Guard permission="product.view"><Products /></Guard>} /> <Route path="orders" element={<Guard permission="order.view"><Orders /></Guard>} /> <Route path="orders/:billId" element={<Guard permission="order.view"><Orders /></Guard>} /> <Route path="waves" element={<Guard permission="wave.manage"><Waves /></Guard>} /> <Route path="waves/:waveId" element={<Guard permission="wave.manage"><Waves /></Guard>} /> <Route path="receipts" element={<Guard permission="inbound.view"><Documents kind="receipt" /></Guard>} /> <Route path="receipts/:billId" element={<Guard permission="inbound.view"><Documents kind="receipt" /></Guard>} /> <Route path="inbounds" element={<Guard permission="inbound.view"><Documents kind="order" /></Guard>} /> <Route path="inbounds/:billId" element={<Guard permission="inbound.view"><Documents kind="order" /></Guard>} /> <Route path="inventory" element={<Guard permission="inventory.view"><Inventory /></Guard>} /> <Route path="putaway" element={<Guard permission="putaway.execute"><Putaway /></Guard>} /> <Route path="moves" element={<Guard permission="move.execute"><Moves /></Guard>} /> <Route path="users" element={<Guard permission="user.manage"><Users /></Guard>} /> <Route path="audit" element={<Guard permission="audit.view"><Audit /></Guard>} /> <Route path="*" element={<Navigate to="/" replace />} /> </Route> </Routes> ) }