fix: 修正全系統側邊欄捲軸重置問題
在所有報表與管理頁面的 router.get 調用中加入 preserveScroll: true。 受影響模組包括: - 財務管理 (會計報表、公用事業費) - 庫存管理 (庫存查詢、倉庫管理、進貨、調整、調撥) - 生產管理 (工單管理、配方管理) - 採購管理 (採購單) - 銷售與發貨管理 (銷售單、發貨單、匯入管理) - 系統管理 (使用者、角色、操作紀錄)
This commit is contained in:
@@ -92,7 +92,7 @@ export default function AccountingReport({ records, summary, filters }: PageProp
|
||||
date_end: dateEnd,
|
||||
per_page: perPage,
|
||||
},
|
||||
{ preserveState: true }
|
||||
{ preserveState: true, preserveScroll: true }
|
||||
);
|
||||
};
|
||||
|
||||
@@ -105,7 +105,7 @@ export default function AccountingReport({ records, summary, filters }: PageProp
|
||||
date_end: dateEnd,
|
||||
per_page: value,
|
||||
},
|
||||
{ preserveState: true }
|
||||
{ preserveState: true, preserveScroll: true }
|
||||
);
|
||||
};
|
||||
|
||||
|
||||
@@ -81,7 +81,7 @@ export default function ActivityLogIndex({ activities, filters, subject_types, u
|
||||
causer_id: causer === 'all' ? undefined : causer,
|
||||
page: 1 // Reset to first page on filter
|
||||
},
|
||||
{ preserveState: true, replace: true }
|
||||
{ preserveState: true, replace: true, preserveScroll: true }
|
||||
);
|
||||
};
|
||||
|
||||
@@ -97,7 +97,7 @@ export default function ActivityLogIndex({ activities, filters, subject_types, u
|
||||
router.get(
|
||||
route('activity-logs.index'),
|
||||
{ per_page: perPage, sort_by: filters.sort_by, sort_order: filters.sort_order },
|
||||
{ preserveState: true, replace: true }
|
||||
{ preserveState: true, replace: true, preserveScroll: true }
|
||||
);
|
||||
};
|
||||
|
||||
@@ -131,7 +131,7 @@ export default function ActivityLogIndex({ activities, filters, subject_types, u
|
||||
router.get(
|
||||
route('activity-logs.index'),
|
||||
{ ...filters, sort_by: newSortBy, sort_order: newSortOrder },
|
||||
{ preserveState: true, replace: true }
|
||||
{ preserveState: true, replace: true, preserveScroll: true }
|
||||
);
|
||||
};
|
||||
|
||||
|
||||
@@ -96,7 +96,7 @@ export default function RoleIndex({ roles, filters = {} }: Props) {
|
||||
router.get(
|
||||
route('roles.index'),
|
||||
{ ...filters, sort_by: newSortBy, sort_order: newSortOrder },
|
||||
{ preserveState: true, replace: true }
|
||||
{ preserveState: true, replace: true, preserveScroll: true }
|
||||
);
|
||||
};
|
||||
|
||||
|
||||
@@ -164,7 +164,7 @@ export default function UserIndex({ users, roles, filters }: Props) {
|
||||
router.get(
|
||||
route('users.index'),
|
||||
{ ...filters, sort_by: newSortBy, sort_order: newSortOrder },
|
||||
{ preserveState: true, replace: true }
|
||||
{ preserveState: true, replace: true, preserveScroll: true }
|
||||
);
|
||||
};
|
||||
|
||||
|
||||
@@ -109,7 +109,7 @@ export default function SalesOrderIndex({ orders, filters }: Props) {
|
||||
router.get(
|
||||
route("integration.sales-orders.index"),
|
||||
{ ...filters, search, page: 1 },
|
||||
{ preserveState: true, replace: true }
|
||||
{ preserveState: true, replace: true, preserveScroll: true }
|
||||
);
|
||||
};
|
||||
|
||||
@@ -118,7 +118,7 @@ export default function SalesOrderIndex({ orders, filters }: Props) {
|
||||
router.get(
|
||||
route("integration.sales-orders.index"),
|
||||
{ ...filters, per_page: value, page: 1 },
|
||||
{ preserveState: false, replace: true }
|
||||
{ preserveState: false, replace: true, preserveScroll: true }
|
||||
);
|
||||
};
|
||||
|
||||
@@ -159,7 +159,7 @@ export default function SalesOrderIndex({ orders, filters }: Props) {
|
||||
router.get(
|
||||
route("integration.sales-orders.index"),
|
||||
{ ...filters, source: v || undefined, page: 1 },
|
||||
{ preserveState: true, replace: true }
|
||||
{ preserveState: true, replace: true, preserveScroll: true }
|
||||
)
|
||||
}
|
||||
options={sourceOptions}
|
||||
|
||||
@@ -102,6 +102,7 @@ export default function Index({ docs, warehouses, filters }: { docs: DocsPaginat
|
||||
router.get(route('inventory.adjust.index'), params as any, {
|
||||
preserveState: true,
|
||||
replace: true,
|
||||
preserveScroll: true,
|
||||
});
|
||||
}, 300),
|
||||
[]
|
||||
|
||||
@@ -69,7 +69,7 @@ export default function GoodsReceiptIndex({ receipts, filters, warehouses }: Pro
|
||||
date_start: dateStart || undefined,
|
||||
date_end: dateEnd || undefined,
|
||||
per_page: perPage,
|
||||
}, { preserveState: true, replace: true });
|
||||
}, { preserveState: true, replace: true, preserveScroll: true });
|
||||
};
|
||||
|
||||
const handleReset = () => {
|
||||
@@ -80,7 +80,7 @@ export default function GoodsReceiptIndex({ receipts, filters, warehouses }: Pro
|
||||
setDateEnd('');
|
||||
setDateRangeType('custom');
|
||||
setPerPage('10');
|
||||
router.get(route('goods-receipts.index'), {}, { preserveState: false });
|
||||
router.get(route('goods-receipts.index'), {}, { preserveState: false, preserveScroll: true });
|
||||
};
|
||||
|
||||
const handleDateRangeChange = (type: string) => {
|
||||
|
||||
@@ -139,6 +139,7 @@ export default function StockQueryIndex({
|
||||
router.get(route("inventory.stock-query.index"), cleaned, {
|
||||
preserveState: true,
|
||||
replace: true,
|
||||
preserveScroll: true,
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
@@ -71,6 +71,7 @@ export default function Index({ warehouses, orders, filters }: any) {
|
||||
router.get(route('inventory.transfer.index'), params, {
|
||||
preserveState: true,
|
||||
replace: true,
|
||||
preserveScroll: true,
|
||||
});
|
||||
}, 500),
|
||||
[]
|
||||
|
||||
@@ -82,12 +82,11 @@ export default function ProductionIndex({ productionOrders, filters }: Props) {
|
||||
status: status === 'all' ? undefined : status,
|
||||
per_page: perPage,
|
||||
},
|
||||
{ preserveState: true, replace: true }
|
||||
{ preserveState: true, replace: true, preserveScroll: true }
|
||||
);
|
||||
};
|
||||
|
||||
|
||||
|
||||
const handlePerPageChange = (value: string) => {
|
||||
setPerPage(value);
|
||||
router.get(
|
||||
@@ -135,7 +134,7 @@ export default function ProductionIndex({ productionOrders, filters }: Props) {
|
||||
<button
|
||||
onClick={() => {
|
||||
setSearch("");
|
||||
router.get(route('production-orders.index'), { ...filters, search: "" }, { preserveState: true, replace: true });
|
||||
router.get(route('production-orders.index'), { ...filters, search: "" }, { preserveState: true, replace: true, preserveScroll: true });
|
||||
}}
|
||||
className="absolute right-3 top-1/2 transform -translate-y-1/2 text-gray-400 hover:text-gray-600"
|
||||
>
|
||||
@@ -152,7 +151,7 @@ export default function ProductionIndex({ productionOrders, filters }: Props) {
|
||||
router.get(
|
||||
route('production-orders.index'),
|
||||
{ ...filters, status: val === 'all' ? undefined : val },
|
||||
{ preserveState: true, replace: true }
|
||||
{ preserveState: true, replace: true, preserveScroll: true }
|
||||
);
|
||||
}}
|
||||
>
|
||||
|
||||
@@ -78,12 +78,11 @@ export default function RecipeIndex({ recipes, filters }: Props) {
|
||||
search,
|
||||
per_page: perPage,
|
||||
},
|
||||
{ preserveState: true, replace: true }
|
||||
{ preserveState: true, replace: true, preserveScroll: true }
|
||||
);
|
||||
};
|
||||
|
||||
|
||||
|
||||
const handlePerPageChange = (value: string) => {
|
||||
setPerPage(value);
|
||||
router.get(
|
||||
@@ -95,7 +94,7 @@ export default function RecipeIndex({ recipes, filters }: Props) {
|
||||
|
||||
const handleDelete = (id: number) => {
|
||||
if (confirm("確定要刪除此配方嗎?")) {
|
||||
router.delete(route('recipes.destroy', id));
|
||||
router.delete(route('recipes.destroy', id), { preserveScroll: true });
|
||||
}
|
||||
};
|
||||
|
||||
@@ -147,7 +146,7 @@ export default function RecipeIndex({ recipes, filters }: Props) {
|
||||
<button
|
||||
onClick={() => {
|
||||
setSearch("");
|
||||
router.get(route('recipes.index'), { ...filters, search: "" }, { preserveState: true, replace: true });
|
||||
router.get(route('recipes.index'), { ...filters, search: "" }, { preserveState: true, replace: true, preserveScroll: true });
|
||||
}}
|
||||
className="absolute right-3 top-1/2 transform -translate-y-1/2 text-gray-400 hover:text-gray-600"
|
||||
>
|
||||
|
||||
@@ -82,7 +82,7 @@ export default function PurchaseOrderIndex({ orders, filters, warehouses }: Prop
|
||||
sort_field: filters.sort_field,
|
||||
sort_direction: filters.sort_direction,
|
||||
},
|
||||
{ preserveState: true, replace: true }
|
||||
{ preserveState: true, replace: true, preserveScroll: true }
|
||||
);
|
||||
};
|
||||
|
||||
@@ -94,7 +94,7 @@ export default function PurchaseOrderIndex({ orders, filters, warehouses }: Prop
|
||||
setDateEnd("");
|
||||
setDateRangeType("custom");
|
||||
|
||||
router.get(route('purchase-orders.index'));
|
||||
router.get(route('purchase-orders.index'), {}, { preserveScroll: true });
|
||||
};
|
||||
|
||||
const handleDateRangeChange = (type: string) => {
|
||||
|
||||
@@ -74,7 +74,7 @@ export default function SalesImportIndex({ batches, filters = {} }: Props) {
|
||||
per_page: perPage,
|
||||
search: search
|
||||
},
|
||||
{ preserveState: true, replace: true }
|
||||
{ preserveState: true, replace: true, preserveScroll: true }
|
||||
);
|
||||
};
|
||||
|
||||
@@ -126,7 +126,7 @@ export default function SalesImportIndex({ batches, filters = {} }: Props) {
|
||||
<button
|
||||
onClick={() => {
|
||||
setSearch("");
|
||||
router.get(route('sales-imports.index'), { ...filters, search: "" }, { preserveState: true, replace: true });
|
||||
router.get(route('sales-imports.index'), { ...filters, search: "" }, { preserveState: true, replace: true, preserveScroll: true });
|
||||
}}
|
||||
className="absolute right-3 top-1/2 transform -translate-y-1/2 text-gray-400 hover:text-gray-600"
|
||||
>
|
||||
|
||||
@@ -41,14 +41,14 @@ export default function ShippingOrderIndex({ orders, filters, warehouses }: Prop
|
||||
search,
|
||||
status: status === 'all' ? undefined : status,
|
||||
},
|
||||
{ preserveState: true, replace: true }
|
||||
{ preserveState: true, replace: true, preserveScroll: true }
|
||||
);
|
||||
};
|
||||
|
||||
const handleReset = () => {
|
||||
setSearch("");
|
||||
setStatus("all");
|
||||
router.get(route('delivery-notes.index'));
|
||||
router.get(route('delivery-notes.index'), {}, { preserveScroll: true });
|
||||
};
|
||||
|
||||
const getStatusBadge = (status: string) => {
|
||||
|
||||
@@ -86,6 +86,7 @@ export default function Index({
|
||||
router.get(route("store-requisitions.index"), params, {
|
||||
preserveState: true,
|
||||
replace: true,
|
||||
preserveScroll: true,
|
||||
});
|
||||
}, 300),
|
||||
[]
|
||||
|
||||
@@ -106,7 +106,7 @@ export default function UtilityFeeIndex({ fees, availableCategories, filters }:
|
||||
sort_direction: sortDirection,
|
||||
per_page: perPage,
|
||||
},
|
||||
{ preserveState: true }
|
||||
{ preserveState: true, preserveScroll: true }
|
||||
);
|
||||
};
|
||||
|
||||
@@ -133,7 +133,7 @@ export default function UtilityFeeIndex({ fees, availableCategories, filters }:
|
||||
setDateStart("");
|
||||
setDateEnd("");
|
||||
setDateRangeType("custom");
|
||||
router.get(route("utility-fees.index"), { per_page: perPage }, { preserveState: false });
|
||||
router.get(route("utility-fees.index"), { per_page: perPage }, { preserveState: false, preserveScroll: true });
|
||||
};
|
||||
|
||||
const handleSort = (field: string) => {
|
||||
@@ -163,7 +163,7 @@ export default function UtilityFeeIndex({ fees, availableCategories, filters }:
|
||||
sort_direction: newDirection,
|
||||
per_page: perPage,
|
||||
},
|
||||
{ preserveState: true }
|
||||
{ preserveState: true, preserveScroll: true }
|
||||
);
|
||||
};
|
||||
|
||||
|
||||
@@ -86,7 +86,7 @@ export default function WarehouseIndex({ warehouses, totals, transitWarehouses,
|
||||
|
||||
// 導航處理
|
||||
const handleViewInventory = (warehouseId: string | number) => {
|
||||
router.get(`/warehouses/${warehouseId}/inventory`);
|
||||
router.get(`/warehouses/${warehouseId}/inventory`, {}, { preserveScroll: true });
|
||||
};
|
||||
|
||||
// 倉庫操作處理函式
|
||||
|
||||
Reference in New Issue
Block a user