فهرست منبع

feat(web):query 生成方法改为横向三按钮切面板

把「query生成方法」下拉框换成横向三按钮(实质 / 形式 / 多轴,固定顺序),点击切换
对应面板,默认选第一个;去掉表格里冗余的「打法」列(每个面板已是单一打法)。重建 dist。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
SamLee 3 هفته پیش
والد
کامیت
5e0eee4b01

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 1
acquisition/web/app/dist/assets/index-JJ8OhAh1.js


+ 1 - 1
acquisition/web/app/dist/index.html

@@ -4,7 +4,7 @@
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
     <title>创作知识 · 找帖子</title>
-    <script type="module" crossorigin src="/app/assets/index-VG3HLxO6.js"></script>
+    <script type="module" crossorigin src="/app/assets/index-JJ8OhAh1.js"></script>
     <link rel="stylesheet" crossorigin href="/app/assets/index-Cz-31bz9.css">
   </head>
   <body>

+ 19 - 11
acquisition/web/app/src/pages/QueriesPage.jsx

@@ -3,9 +3,11 @@ import { fetchMethods, fetchQueries, fetchSearchSummary } from '../api.js'
 import Pager from '../components/Pager.jsx'
 
 const SIZE = 30
+// 三种 query 生成方法的展示顺序(① 实质 ② 形式 ④ 多轴)
+const ORDER = ['实质 × 创作阶段 × 需求', '形式 + 载体位置', '多轴正交组合']
 
-// 生成的 query 列表(按打法筛 + 分页)。每条 query 末列挂「真实搜索结果」按钮:
-// 搜到结果 → 可跳转进详情;搜过没结果 / 没搜过 → 灰色不可点,状态如实标注
+// 生成的 query 列表(按打法筛 + 分页)。打法 = 横向三按钮,点击切面板。每条 query 末列挂
+// 「真实搜索结果」按钮:搜到结果 → 可跳转进详情;搜过没结果 / 没搜过 → 灰色不可点。
 export default function QueriesPage() {
   const [methods, setMethods] = useState([])
   const [method, setMethod] = useState('')
@@ -13,19 +15,26 @@ export default function QueriesPage() {
   const [data, setData] = useState({ total: 0, page: 1, size: SIZE, items: [] })
   const [summary, setSummary] = useState({})
 
-  useEffect(() => { fetchMethods('queries').then(setMethods) }, [])
+  useEffect(() => {
+    fetchMethods('queries').then((ms) => {
+      const ordered = [...ms].sort((a, b) => (ORDER.indexOf(a) + 1 || 99) - (ORDER.indexOf(b) + 1 || 99))
+      setMethods(ordered)
+      if (ordered.length) setMethod((m) => m || ordered[0])   // 默认选第一个面板
+    })
+  }, [])
   useEffect(() => { fetchSearchSummary().then(setSummary) }, [])
-  useEffect(() => { fetchQueries({ method, page, size: SIZE }).then(setData) }, [method, page])
+  useEffect(() => { if (method) fetchQueries({ method, page, size: SIZE }).then(setData) }, [method, page])
 
-  const onMethod = (m) => { setMethod(m); setPage(1) }
+  const pick = (m) => { setMethod(m); setPage(1) }
 
   return (
     <div>
+      <div className="nav">
+        {methods.map((m) => (
+          <button key={m} className={method === m ? 'on' : ''} onClick={() => pick(m)}>{m}</button>
+        ))}
+      </div>
       <div className="filters">
-        <select value={method} onChange={(e) => onMethod(e.target.value)}>
-          <option value="">query生成方法</option>
-          {methods.map((m) => <option key={m} value={m}>{m}</option>)}
-        </select>
         <span className="count">共 {data.total} 条 query</span>
       </div>
 
@@ -34,12 +43,11 @@ export default function QueriesPage() {
       ) : (
         <table>
           <thead>
-            <tr><th>打法</th><th>正交轴</th><th>query</th><th>真实搜索结果</th></tr>
+            <tr><th>正交轴</th><th>query</th><th>真实搜索结果</th></tr>
           </thead>
           <tbody>
             {data.items.map((it) => (
               <tr key={it.id}>
-                <td><span className="tag">{it.method}</span></td>
                 <td>{Object.entries(it.axes || {}).map(([k, v]) => (
                   <span className="tag k" key={k}>{k}:{v}</span>
                 ))}</td>

برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است