fix(config): phase 7 follow-up — fix remaining /ims/ occurrences in sw.js, notifications, components

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-07-23 22:32:11 +08:00
co-authored by Claude Sonnet 4.6
parent 9d047e168f
commit 0389d6091a
12 changed files with 21 additions and 21 deletions
+2 -2
View File
@@ -27,7 +27,7 @@ export function SiteZoneManager({ sites }: Props) {
const post = async (payload: Record<string, unknown>) => {
setBusy(true)
setError(null)
const res = await fetch('/ims/api/admin/sites', {
const res = await fetch('/api/admin/sites', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(payload),
@@ -46,7 +46,7 @@ export function SiteZoneManager({ sites }: Props) {
const id = payload.id as string
setBusyId(id)
setError(null)
const res = await fetch('/ims/api/admin/sites', {
const res = await fetch('/api/admin/sites', {
method,
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(payload),
+2 -2
View File
@@ -28,7 +28,7 @@ export function TruckManager({ trucks }: Props) {
setSubmitting(true)
setError(null)
try {
const res = await fetch('/ims/api/admin/trucks', {
const res = await fetch('/api/admin/trucks', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ truck_no: no, carrier: carrier.trim() || null }),
@@ -53,7 +53,7 @@ export function TruckManager({ trucks }: Props) {
setBusyId(id)
setError(null)
try {
const res = await fetch('/ims/api/admin/trucks', {
const res = await fetch('/api/admin/trucks', {
method,
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(payload),
+2 -2
View File
@@ -34,7 +34,7 @@ export function UserManager({ users, sites }: Props) {
const patchUser = async (id: string, update: Record<string, unknown>) => {
setBusyId(id)
setError(null)
const res = await fetch('/ims/api/admin/users', {
const res = await fetch('/api/admin/users', {
method: 'PATCH',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ id, ...update }),
@@ -66,7 +66,7 @@ export function UserManager({ users, sites }: Props) {
e.preventDefault()
setSubmitting(true)
setError(null)
const res = await fetch('/ims/api/admin/users', {
const res = await fetch('/api/admin/users', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
+2 -2
View File
@@ -26,7 +26,7 @@ export function CapaForm({ incidentId }: Props) {
const [error, setError] = useState<string | null>(null)
useEffect(() => {
fetch('/ims/api/users')
fetch('/api/users')
.then(r => r.json())
.then(data => { if (Array.isArray(data)) setUsers(data) })
.catch(() => {})
@@ -46,7 +46,7 @@ export function CapaForm({ incidentId }: Props) {
}
setSaving(true)
setError(null)
const res = await fetch('/ims/api/capa', {
const res = await fetch('/api/capa', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
+1 -1
View File
@@ -26,7 +26,7 @@ export function RiskFlagsPanel() {
setLoading(true)
setError(null)
try {
const res = await fetch('/ims/api/dashboard/ai/risk-flags', { method: 'POST' })
const res = await fetch('/api/dashboard/ai/risk-flags', { method: 'POST' })
if (!res.ok) {
const data = await res.json().catch(() => ({}))
setError(data.error ?? 'Analysis failed')
+1 -1
View File
@@ -30,7 +30,7 @@ export function OfflineSync() {
if (report.type_details) fd.append('type_details', JSON.stringify(report.type_details))
try {
const res = await fetch('/ims/api/incidents', { method: 'POST', body: fd })
const res = await fetch('/api/incidents', { method: 'POST', body: fd })
if (res.ok && report.id != null) {
await removePendingReport(report.id)
}
+2 -2
View File
@@ -134,7 +134,7 @@ export function ReportForm({ zoneToken, trucks, initialTruckId }: Props) {
if (!overrideQuality) {
try {
const qcRes = await fetch('/ims/api/incidents/ai/quality-check', {
const qcRes = await fetch('/api/incidents/ai/quality-check', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
@@ -176,7 +176,7 @@ export function ReportForm({ zoneToken, trucks, initialTruckId }: Props) {
if (form.truck_id) fd.append('truck_id', form.truck_id)
files.forEach(f => fd.append('files', f))
const res = await fetch('/ims/api/incidents', { method: 'POST', body: fd })
const res = await fetch('/api/incidents', { method: 'POST', body: fd })
// Parse JSON separately so a non-JSON response (HTML error page) surfaces the status code
let data: Record<string, unknown> = {}
+2 -2
View File
@@ -20,7 +20,7 @@ export function NotificationBell() {
const panelRef = useRef<HTMLDivElement>(null)
const load = useCallback(() => {
fetch('/ims/api/notifications')
fetch('/api/notifications')
.then(r => (r.ok ? r.json() : Promise.reject()))
.then((data: { notifications: Notification[]; unread: number }) => {
setNotifications(data.notifications)
@@ -45,7 +45,7 @@ export function NotificationBell() {
}, [open])
const markAllRead = () => {
fetch('/ims/api/notifications', {
fetch('/api/notifications', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ all: true }),
+1 -1
View File
@@ -25,7 +25,7 @@ export function ApiKeyForm({ settings }: Props) {
setSaving(s => ({ ...s, [key]: true }))
setResults(r => ({ ...r, [key]: undefined as never }))
try {
const res = await fetch('/ims/api/settings', {
const res = await fetch('/api/settings', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ key, value: values[key] }),