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,
|
date_end: dateEnd,
|
||||||
per_page: perPage,
|
per_page: perPage,
|
||||||
},
|
},
|
||||||
{ preserveState: true }
|
{ preserveState: true, preserveScroll: true }
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -105,7 +105,7 @@ export default function AccountingReport({ records, summary, filters }: PageProp
|
|||||||
date_end: dateEnd,
|
date_end: dateEnd,
|
||||||
per_page: value,
|
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,
|
causer_id: causer === 'all' ? undefined : causer,
|
||||||
page: 1 // Reset to first page on filter
|
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(
|
router.get(
|
||||||
route('activity-logs.index'),
|
route('activity-logs.index'),
|
||||||
{ per_page: perPage, sort_by: filters.sort_by, sort_order: filters.sort_order },
|
{ 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(
|
router.get(
|
||||||
route('activity-logs.index'),
|
route('activity-logs.index'),
|
||||||
{ ...filters, sort_by: newSortBy, sort_order: newSortOrder },
|
{ ...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(
|
router.get(
|
||||||
route('roles.index'),
|
route('roles.index'),
|
||||||
{ ...filters, sort_by: newSortBy, sort_order: newSortOrder },
|
{ ...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(
|
router.get(
|
||||||
route('users.index'),
|
route('users.index'),
|
||||||
{ ...filters, sort_by: newSortBy, sort_order: newSortOrder },
|
{ ...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(
|
router.get(
|
||||||
route("integration.sales-orders.index"),
|
route("integration.sales-orders.index"),
|
||||||
{ ...filters, search, page: 1 },
|
{ ...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(
|
router.get(
|
||||||
route("integration.sales-orders.index"),
|
route("integration.sales-orders.index"),
|
||||||
{ ...filters, per_page: value, page: 1 },
|
{ ...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(
|
router.get(
|
||||||
route("integration.sales-orders.index"),
|
route("integration.sales-orders.index"),
|
||||||
{ ...filters, source: v || undefined, page: 1 },
|
{ ...filters, source: v || undefined, page: 1 },
|
||||||
{ preserveState: true, replace: true }
|
{ preserveState: true, replace: true, preserveScroll: true }
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
options={sourceOptions}
|
options={sourceOptions}
|
||||||
|
|||||||
@@ -102,6 +102,7 @@ export default function Index({ docs, warehouses, filters }: { docs: DocsPaginat
|
|||||||
router.get(route('inventory.adjust.index'), params as any, {
|
router.get(route('inventory.adjust.index'), params as any, {
|
||||||
preserveState: true,
|
preserveState: true,
|
||||||
replace: true,
|
replace: true,
|
||||||
|
preserveScroll: true,
|
||||||
});
|
});
|
||||||
}, 300),
|
}, 300),
|
||||||
[]
|
[]
|
||||||
|
|||||||
@@ -69,7 +69,7 @@ export default function GoodsReceiptIndex({ receipts, filters, warehouses }: Pro
|
|||||||
date_start: dateStart || undefined,
|
date_start: dateStart || undefined,
|
||||||
date_end: dateEnd || undefined,
|
date_end: dateEnd || undefined,
|
||||||
per_page: perPage,
|
per_page: perPage,
|
||||||
}, { preserveState: true, replace: true });
|
}, { preserveState: true, replace: true, preserveScroll: true });
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleReset = () => {
|
const handleReset = () => {
|
||||||
@@ -80,7 +80,7 @@ export default function GoodsReceiptIndex({ receipts, filters, warehouses }: Pro
|
|||||||
setDateEnd('');
|
setDateEnd('');
|
||||||
setDateRangeType('custom');
|
setDateRangeType('custom');
|
||||||
setPerPage('10');
|
setPerPage('10');
|
||||||
router.get(route('goods-receipts.index'), {}, { preserveState: false });
|
router.get(route('goods-receipts.index'), {}, { preserveState: false, preserveScroll: true });
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleDateRangeChange = (type: string) => {
|
const handleDateRangeChange = (type: string) => {
|
||||||
|
|||||||
@@ -139,6 +139,7 @@ export default function StockQueryIndex({
|
|||||||
router.get(route("inventory.stock-query.index"), cleaned, {
|
router.get(route("inventory.stock-query.index"), cleaned, {
|
||||||
preserveState: true,
|
preserveState: true,
|
||||||
replace: true,
|
replace: true,
|
||||||
|
preserveScroll: true,
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -71,6 +71,7 @@ export default function Index({ warehouses, orders, filters }: any) {
|
|||||||
router.get(route('inventory.transfer.index'), params, {
|
router.get(route('inventory.transfer.index'), params, {
|
||||||
preserveState: true,
|
preserveState: true,
|
||||||
replace: true,
|
replace: true,
|
||||||
|
preserveScroll: true,
|
||||||
});
|
});
|
||||||
}, 500),
|
}, 500),
|
||||||
[]
|
[]
|
||||||
|
|||||||
@@ -82,12 +82,11 @@ export default function ProductionIndex({ productionOrders, filters }: Props) {
|
|||||||
status: status === 'all' ? undefined : status,
|
status: status === 'all' ? undefined : status,
|
||||||
per_page: perPage,
|
per_page: perPage,
|
||||||
},
|
},
|
||||||
{ preserveState: true, replace: true }
|
{ preserveState: true, replace: true, preserveScroll: true }
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const handlePerPageChange = (value: string) => {
|
const handlePerPageChange = (value: string) => {
|
||||||
setPerPage(value);
|
setPerPage(value);
|
||||||
router.get(
|
router.get(
|
||||||
@@ -135,7 +134,7 @@ export default function ProductionIndex({ productionOrders, filters }: Props) {
|
|||||||
<button
|
<button
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
setSearch("");
|
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"
|
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(
|
router.get(
|
||||||
route('production-orders.index'),
|
route('production-orders.index'),
|
||||||
{ ...filters, status: val === 'all' ? undefined : val },
|
{ ...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,
|
search,
|
||||||
per_page: perPage,
|
per_page: perPage,
|
||||||
},
|
},
|
||||||
{ preserveState: true, replace: true }
|
{ preserveState: true, replace: true, preserveScroll: true }
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const handlePerPageChange = (value: string) => {
|
const handlePerPageChange = (value: string) => {
|
||||||
setPerPage(value);
|
setPerPage(value);
|
||||||
router.get(
|
router.get(
|
||||||
@@ -95,7 +94,7 @@ export default function RecipeIndex({ recipes, filters }: Props) {
|
|||||||
|
|
||||||
const handleDelete = (id: number) => {
|
const handleDelete = (id: number) => {
|
||||||
if (confirm("確定要刪除此配方嗎?")) {
|
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
|
<button
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
setSearch("");
|
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"
|
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_field: filters.sort_field,
|
||||||
sort_direction: filters.sort_direction,
|
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("");
|
setDateEnd("");
|
||||||
setDateRangeType("custom");
|
setDateRangeType("custom");
|
||||||
|
|
||||||
router.get(route('purchase-orders.index'));
|
router.get(route('purchase-orders.index'), {}, { preserveScroll: true });
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleDateRangeChange = (type: string) => {
|
const handleDateRangeChange = (type: string) => {
|
||||||
|
|||||||
@@ -74,7 +74,7 @@ export default function SalesImportIndex({ batches, filters = {} }: Props) {
|
|||||||
per_page: perPage,
|
per_page: perPage,
|
||||||
search: search
|
search: search
|
||||||
},
|
},
|
||||||
{ preserveState: true, replace: true }
|
{ preserveState: true, replace: true, preserveScroll: true }
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -126,7 +126,7 @@ export default function SalesImportIndex({ batches, filters = {} }: Props) {
|
|||||||
<button
|
<button
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
setSearch("");
|
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"
|
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,
|
search,
|
||||||
status: status === 'all' ? undefined : status,
|
status: status === 'all' ? undefined : status,
|
||||||
},
|
},
|
||||||
{ preserveState: true, replace: true }
|
{ preserveState: true, replace: true, preserveScroll: true }
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleReset = () => {
|
const handleReset = () => {
|
||||||
setSearch("");
|
setSearch("");
|
||||||
setStatus("all");
|
setStatus("all");
|
||||||
router.get(route('delivery-notes.index'));
|
router.get(route('delivery-notes.index'), {}, { preserveScroll: true });
|
||||||
};
|
};
|
||||||
|
|
||||||
const getStatusBadge = (status: string) => {
|
const getStatusBadge = (status: string) => {
|
||||||
|
|||||||
@@ -86,6 +86,7 @@ export default function Index({
|
|||||||
router.get(route("store-requisitions.index"), params, {
|
router.get(route("store-requisitions.index"), params, {
|
||||||
preserveState: true,
|
preserveState: true,
|
||||||
replace: true,
|
replace: true,
|
||||||
|
preserveScroll: true,
|
||||||
});
|
});
|
||||||
}, 300),
|
}, 300),
|
||||||
[]
|
[]
|
||||||
|
|||||||
@@ -106,7 +106,7 @@ export default function UtilityFeeIndex({ fees, availableCategories, filters }:
|
|||||||
sort_direction: sortDirection,
|
sort_direction: sortDirection,
|
||||||
per_page: perPage,
|
per_page: perPage,
|
||||||
},
|
},
|
||||||
{ preserveState: true }
|
{ preserveState: true, preserveScroll: true }
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -133,7 +133,7 @@ export default function UtilityFeeIndex({ fees, availableCategories, filters }:
|
|||||||
setDateStart("");
|
setDateStart("");
|
||||||
setDateEnd("");
|
setDateEnd("");
|
||||||
setDateRangeType("custom");
|
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) => {
|
const handleSort = (field: string) => {
|
||||||
@@ -163,7 +163,7 @@ export default function UtilityFeeIndex({ fees, availableCategories, filters }:
|
|||||||
sort_direction: newDirection,
|
sort_direction: newDirection,
|
||||||
per_page: perPage,
|
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) => {
|
const handleViewInventory = (warehouseId: string | number) => {
|
||||||
router.get(`/warehouses/${warehouseId}/inventory`);
|
router.get(`/warehouses/${warehouseId}/inventory`, {}, { preserveScroll: true });
|
||||||
};
|
};
|
||||||
|
|
||||||
// 倉庫操作處理函式
|
// 倉庫操作處理函式
|
||||||
|
|||||||
Reference in New Issue
Block a user