|
@@ -25,13 +25,13 @@ function selectedQueryPayload(queryText, latest) {
|
|
|
|
|
|
|
|
function manualFamilyFromBoard(board) {
|
|
function manualFamilyFromBoard(board) {
|
|
|
const rows = (board?.queries || []).filter((row) => row.family_key === 'manual')
|
|
const rows = (board?.queries || []).filter((row) => row.family_key === 'manual')
|
|
|
- if (!rows.length) return null
|
|
|
|
|
return {
|
|
return {
|
|
|
key: 'manual',
|
|
key: 'manual',
|
|
|
- axes: ['手动 Query'],
|
|
|
|
|
|
|
+ label: '手动 Query',
|
|
|
|
|
+ axes: [],
|
|
|
items: rows.map((row, index) => ({
|
|
items: rows.map((row, index) => ({
|
|
|
query: row.query_text,
|
|
query: row.query_text,
|
|
|
- parts: { '手动 Query': '手动 Query' },
|
|
|
|
|
|
|
+ parts: {},
|
|
|
keep: true,
|
|
keep: true,
|
|
|
reason: row.filter_reason || '',
|
|
reason: row.filter_reason || '',
|
|
|
sort_order: row.sort_order ?? index,
|
|
sort_order: row.sort_order ?? index,
|
|
@@ -57,7 +57,7 @@ export default function QueryBoardPage() {
|
|
|
const families = useMemo(() => {
|
|
const families = useMemo(() => {
|
|
|
const base = preview?.families || []
|
|
const base = preview?.families || []
|
|
|
const manual = manualFamilyFromBoard(board)
|
|
const manual = manualFamilyFromBoard(board)
|
|
|
- return manual ? [...base, manual] : base
|
|
|
|
|
|
|
+ return [...base, manual]
|
|
|
}, [board, preview])
|
|
}, [board, preview])
|
|
|
const family = families.find((row) => row.key === activeKey) || families[0] || { axes: [], items: [] }
|
|
const family = families.find((row) => row.key === activeKey) || families[0] || { axes: [], items: [] }
|
|
|
const familyItems = family.items || []
|
|
const familyItems = family.items || []
|
|
@@ -79,7 +79,10 @@ export default function QueryBoardPage() {
|
|
|
}, [families, activeKey])
|
|
}, [families, activeKey])
|
|
|
|
|
|
|
|
useEffect(() => {
|
|
useEffect(() => {
|
|
|
- if (!familyItems.length) return
|
|
|
|
|
|
|
+ if (!familyItems.length) {
|
|
|
|
|
+ if (selectedQuery) setSelectedQuery(null)
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
if (selectedQuery && familyItems.some((item) => item.query === selectedQuery.query)) {
|
|
if (selectedQuery && familyItems.some((item) => item.query === selectedQuery.query)) {
|
|
|
const latest = latestByQuery.get(selectedQuery.query)
|
|
const latest = latestByQuery.get(selectedQuery.query)
|
|
|
const next = selectedQueryPayload(selectedQuery.query, latest)
|
|
const next = selectedQueryPayload(selectedQuery.query, latest)
|
|
@@ -111,7 +114,7 @@ export default function QueryBoardPage() {
|
|
|
type="button"
|
|
type="button"
|
|
|
onClick={() => setActiveKey(row.key)}
|
|
onClick={() => setActiveKey(row.key)}
|
|
|
>
|
|
>
|
|
|
- <span className="fbtn-pre">{row.axes?.[0] || row.key}</span>
|
|
|
|
|
|
|
+ <span className="fbtn-pre">{row.label || row.axes?.[0] || row.key}</span>
|
|
|
<span className="fbtn-suf">{(row.axes || []).slice(1).join(' × ')}</span>
|
|
<span className="fbtn-suf">{(row.axes || []).slice(1).join(' × ')}</span>
|
|
|
</button>
|
|
</button>
|
|
|
))}
|
|
))}
|
|
@@ -144,6 +147,11 @@ export default function QueryBoardPage() {
|
|
|
familyRunCount={familyRunCount}
|
|
familyRunCount={familyRunCount}
|
|
|
totalRunCount={totalRunCount}
|
|
totalRunCount={totalRunCount}
|
|
|
totalItemCount={totalItemCount}
|
|
totalItemCount={totalItemCount}
|
|
|
|
|
+ emptyMessage={
|
|
|
|
|
+ family.key === 'manual'
|
|
|
|
|
+ ? '暂无手动 Query,点击右上角手动输入或上传 JSON 创建。'
|
|
|
|
|
+ : undefined
|
|
|
|
|
+ }
|
|
|
/>
|
|
/>
|
|
|
<SearchResultColumn
|
|
<SearchResultColumn
|
|
|
selected={selectedQuery}
|
|
selected={selectedQuery}
|