setExecutionStatusDrawerOpen(true)}
+ result={displayedResult}
selectedTargetTradeDate={selectedTargetTradeDate}
triggerError={trigger.isError}
+ triggerRef={executionStatusTriggerRef}
/>
}
mode="bounded-workspace"
>
-
+
{isRunning ? : null}
{!isRunning &&
!hasQueryError &&
@@ -163,12 +173,7 @@ export function SelectionResultsPage() {
{!isRunning &&
!hasQueryError &&
displayedResult?.status === "failed" ? (
- setExecutionStatusDrawerOpen(true)}
- result={displayedResult}
- triggerRef={executionStatusTriggerRef}
- />
+
) : null}
{!isRunning &&
!hasQueryError &&
@@ -176,10 +181,11 @@ export function SelectionResultsPage() {
displayedResult.status !== "no_data" &&
displayedResult.status !== "failed" ? (
setExecutionStatusDrawerOpen(true)}
+ hasNextPage={Boolean(listQuery.hasNextPage)}
+ isFetchNextPageError={Boolean(listQuery.isFetchNextPageError)}
+ isFetchingNextPage={Boolean(listQuery.isFetchingNextPage)}
+ onLoadMore={() => listQuery.fetchNextPage()}
result={displayedResult}
- triggerRef={executionStatusTriggerRef}
/>
) : null}
@@ -228,23 +234,31 @@ export function SelectionResultsPage() {
}
interface ExecutionToolbarProps {
+ drawerOpen: boolean
hasExistingResult: boolean
isFailedResult: boolean
isRunning: boolean
onDateChange: (value: Date | undefined) => void
onExecute: () => void
+ onOpenExecutionStatus: () => void
+ result: SelectionResults | undefined
selectedTargetTradeDate: string
triggerError: boolean
+ triggerRef: RefObject
}
function ExecutionToolbar({
+ drawerOpen,
hasExistingResult,
isFailedResult,
isRunning,
onDateChange,
onExecute,
+ onOpenExecutionStatus,
+ result,
selectedTargetTradeDate,
triggerError,
+ triggerRef,
}: ExecutionToolbarProps) {
return (
@@ -278,26 +292,36 @@ function ExecutionToolbar({
-
+
+
+ {result ? (
+
+ ) : null}
+
{triggerError ? (
@@ -309,10 +333,11 @@ function ExecutionToolbar({
}
interface ResultStateProps {
- drawerOpen: boolean
- onOpenExecutionStatus: () => void
+ hasNextPage: boolean
+ isFetchNextPageError: boolean
+ isFetchingNextPage: boolean
+ onLoadMore: () => void | Promise
result: SelectionResults
- triggerRef: RefObject
}
function parseLocalTradeDate(value: string): Date | undefined {
@@ -409,12 +434,7 @@ function NoDataState() {
)
}
-function FailureState({
- drawerOpen,
- onOpenExecutionStatus,
- result,
- triggerRef,
-}: ResultStateProps) {
+function FailureState({ result }: { result: SelectionResults }) {
return (
@@ -431,75 +451,49 @@ function FailureState({
-
-
- 目标交易日:
-
- {result.target_trade_date}
-
- ,失败股票:
-
- {result.failed_count}
-
-
-
-
+
+ 目标交易日:
+
+ {result.target_trade_date}
+
+ ,失败股票:
+
+ {result.failed_count}
+
+
)
}
function ResultState({
- drawerOpen,
- onOpenExecutionStatus,
+ hasNextPage,
+ isFetchNextPageError,
+ isFetchingNextPage,
+ onLoadMore,
result,
- triggerRef,
}: ResultStateProps) {
return result.signal_count === 0 ? (
-
+
) : (
)
}
-function NoSignalState({
- drawerOpen,
- onOpenExecutionStatus,
- result,
- triggerRef,
-}: ResultStateProps) {
+function NoSignalState() {
return (
-
-
- 本次没有命中信号
-
- 目标交易日数据完整,但没有符合公式条件的股票。
-
-
-
-
+ 本次没有命中信号
+
+ 目标交易日数据完整,但没有符合公式条件的股票。
+
)
diff --git a/zhixing-web/src/routes/route-tree.tsx b/zhixing-web/src/routes/route-tree.tsx
index ab102ad..b06dbf7 100644
--- a/zhixing-web/src/routes/route-tree.tsx
+++ b/zhixing-web/src/routes/route-tree.tsx
@@ -16,6 +16,7 @@ import {
import { SectorRadarPage } from "@/features/sector-radar/pages/sector-radar-page"
import {
selectionCategoryFilters,
+ selectionResultPageSize,
selectionSorts,
type SelectionCategoryFilter,
type SelectionSort,
@@ -104,7 +105,10 @@ const selectionRoute = createRoute({
const rawPageSize = Number(search.pageSize)
const page =
Number.isFinite(rawPage) && rawPage >= 1 ? Math.floor(rawPage) : 1
- const pageSize = [5, 10, 15].includes(rawPageSize) ? rawPageSize : 10
+ const pageSize =
+ Number.isFinite(rawPageSize) && rawPageSize >= 1 && rawPageSize <= 100
+ ? Math.floor(rawPageSize)
+ : selectionResultPageSize
const searchValue =
typeof search.search === "string" ? search.search.slice(0, 100) : ""
const rawCategory =