1
1
<script setup lang="ts">
2
2
import type { Detail } from ' get-bonus' ;
3
3
import type { SubjectInformation , SubjectPersons , PersonInformation } from ' bgmc' ;
4
- import { Loader , Loader2 , Search , Moon , Sun , Trash2 , XCircle , Sparkles , History , AlertCircle } from ' lucide-vue-next' ;
5
- import { ref , watchEffect } from ' vue' ;
6
- import { Card , CardContent } from ' ..//components/ui/card' ;
4
+ import {
5
+ Loader ,
6
+ Loader2 ,
7
+ Search ,
8
+ Moon ,
9
+ Sun ,
10
+ Trash2 ,
11
+ XCircle ,
12
+ Sparkles ,
13
+ History ,
14
+ AlertCircle
15
+ } from ' lucide-vue-next' ;
16
+ import { ref , watchEffect } from ' vue' ;
17
+ import { Card , CardContent } from ' ..//components/ui/card' ;
7
18
8
19
const route = useRoute ();
9
20
const router = useRouter ();
10
21
11
- const { data } = await useAsyncData (' search_results' , async () =>
12
- route .query .q
13
- ? Promise .all ([$fetch (` /api/search/${route .query .q } ` ), $fetch (` /api/bgm/${route .query .q } ` , {})])
14
- : undefined
15
- );
22
+ // const { data } = await useAsyncData('search_results', async () =>
23
+ // route.query.q
24
+ // ? Promise.all([$fetch(`/api/search/${route.query.q}`), $fetch(`/api/bgm/${route.query.q}`, {})])
25
+ // : undefined
26
+ // );
16
27
17
28
type FullDetail = {
18
29
details: Record <string , Detail []> | null ;
@@ -21,18 +32,22 @@ type FullDetail = {
21
32
};
22
33
23
34
const details = ref <FullDetail | null >(
24
- data .value
25
- ? {
26
- details: data .value [0 ].details ,
27
- subject: data .value [1 ]?.subject ,
28
- persons: data .value [1 ]?.persons
29
- }
30
- : null
35
+ null
36
+ // data.value
37
+ // ? {
38
+ // details: data.value[0].details,
39
+ // subject: data.value[1]?.subject,
40
+ // persons: data.value[1]?.persons
41
+ // }
42
+ // : null
31
43
);
32
44
33
45
let abort: AbortController | null = null ;
34
- const searchInput = ref ((route .query .q as string | null ) || ' ' );
46
+ // const searchInput = ref((route.query.q as string | null) || '');
47
+ const searchInput = ref (' ' );
35
48
const isSearching = ref (false );
49
+ const searchHistory = ref <string []>([]);
50
+
36
51
const resetSearch = () => {
37
52
if (! abort && ! searchInput .value && ! details .value ) return ;
38
53
abort ?.abort ();
@@ -52,8 +67,8 @@ const search = async (input: string) => {
52
67
path: route .path ,
53
68
query: { q: input }
54
69
});
55
- const updatedHistory = [input , ... searchHistory .value .filter (item => item !== input )];
56
- searchHistory .value = updatedHistory .slice (0 , 5 );
70
+ const updatedHistory = [input , ... searchHistory .value .filter (( item ) => item !== input )];
71
+ searchHistory .value = updatedHistory .slice (0 , 5 );
57
72
try {
58
73
abort = new AbortController ();
59
74
isSearching .value = true ;
83
98
search (searchInput .value );
84
99
}
85
100
}
86
- }
101
+ },
102
+ { immediate: true }
87
103
);
88
104
89
105
const foundNums = computed (() => {
@@ -118,34 +134,32 @@ const random = (arr: string[]) => {
118
134
119
135
const colorMode = useColorMode ();
120
136
121
- const searchHistory = ref <string []>([]);
122
-
123
- // 初始化时从localStorage加载搜索历史
124
- const initHistory = () => {
125
- const savedHistory = localStorage .getItem (' searchHistory' );
126
- if (savedHistory ) {
127
- searchHistory .value = JSON .parse (savedHistory ) as string [];
128
- }
129
- };
130
-
131
- // 移除历史记录中的某个条目
132
- const removeHistoryItem = (index : number ) => {
133
- searchHistory .value .splice (index , 1 );
134
- };
135
-
136
- // 清空搜索历史
137
- const clearHistory = () => {
138
- searchHistory .value = [];
139
- };
137
+ // 初始化时从localStorage加载搜索历史
138
+ const initHistory = () => {
139
+ const savedHistory = localStorage .getItem (' searchHistory' );
140
+ if (savedHistory ) {
141
+ searchHistory .value = JSON .parse (savedHistory ) as string [];
142
+ }
143
+ };
144
+
145
+ // 移除历史记录中的某个条目
146
+ const removeHistoryItem = (index : number ) => {
147
+ searchHistory .value .splice (index , 1 );
148
+ };
149
+
150
+ // 清空搜索历史
151
+ const clearHistory = () => {
152
+ searchHistory .value = [];
153
+ };
140
154
141
- onMounted (() => {
142
- initHistory ();
155
+ onMounted (() => {
156
+ initHistory ();
143
157
144
- // 监听searchHistory的变化并保存到localStorage
145
- watchEffect (() => {
146
- localStorage .setItem (' searchHistory' , JSON .stringify (searchHistory .value ));
147
- });
148
- });
158
+ // 监听searchHistory的变化并保存到localStorage
159
+ watchEffect (() => {
160
+ localStorage .setItem (' searchHistory' , JSON .stringify (searchHistory .value ));
161
+ });
162
+ });
149
163
</script >
150
164
151
165
<template >
@@ -201,21 +215,21 @@ onMounted(() => {
201
215
<button class =" mr-1.5" >
202
216
<History class =" w-3 h-3" ></History >
203
217
</button >
204
- 搜索历史
218
+ 搜索历史
205
219
</Badge >
206
220
<Badge variant =" outline" class =" select-none mr-4" >
207
- <button @click =" clearHistory" >
221
+ <button @click =" clearHistory" >
208
222
<Trash2 class =" w-3 h-3" ></Trash2 >
209
- </button >
223
+ </button >
210
224
</Badge >
211
- <Item v-for =" (item, index) in searchHistory" :key =" index" class =" mr-4" >
212
- <button @click =" search(item)" class =" mr-3" >
213
- {{ item }}
214
- </button >
215
- <button @click =" removeHistoryItem(index)" >
216
- <XCircle class =" w-3 h-3 mr-4" ></XCircle >
217
- </button >
218
- </Item >
225
+ <span v-for =" (item, index) in searchHistory" :key =" index" class =" mr-4" >
226
+ <button @click =" search(item)" class =" mr-3" >
227
+ {{ item }}
228
+ </button >
229
+ <button @click =" removeHistoryItem(index)" >
230
+ <XCircle class =" w-3 h-3 mr-4" ></XCircle >
231
+ </button >
232
+ </span >
219
233
</div >
220
234
<div class =" mt-4 flex gap-4" >
221
235
<ClientOnly >
@@ -224,8 +238,8 @@ onMounted(() => {
224
238
<button class =" mr-1.5" >
225
239
<Sparkles class =" w-3 h-3" ></Sparkles >
226
240
</button >
227
- 试一试吧
228
- </ Badge >  ;
241
+ 试一试吧 </ Badge
242
+ >  ;
229
243
<span v-for =" (title, idx) in random(examples)" :key =" title"
230
244
>{{ idx > 0 ? '  ; |  ; ' : ''
231
245
}}<span
@@ -248,16 +262,16 @@ onMounted(() => {
248
262
></BangumiResult >
249
263
<div v-else class =" flex" >
250
264
<Card class =" w-full mb-6" >
251
- <CardContent class =" p-6" >
252
- <span class =" text-2xl font-bold" >貌似在 Bangumi 番组计划 没有找到作品详情。</span >
253
- <br />如果你搜索的并不是一部具体的「作品」,或者下方的商家搜索结果已按预期输出,请忽略本提示。
254
- <br />如果你搜索的作品在 Bangumi 番组计划存在,但仍然弹出这个提示,您可以<a
255
- href =" https://github.com/YurierDept/get-bonus/issues"
256
- target =" _blank"
257
- class =" color-blue"
258
- >提交 Issue</a
259
- >。
260
- </CardContent >
265
+ <CardContent class =" p-6" >
266
+ <span class =" text-2xl font-bold" >貌似在 Bangumi 番组计划 没有找到作品详情。</span >
267
+ <br />如果你搜索的并不是一部具体的「作品」,或者下方的商家搜索结果已按预期输出,请忽略本提示。
268
+ <br />如果你搜索的作品在 Bangumi 番组计划存在,但仍然弹出这个提示,您可以<a
269
+ href =" https://github.com/YurierDept/get-bonus/issues"
270
+ target =" _blank"
271
+ class =" color-blue"
272
+ >提交 Issue</a
273
+ >。
274
+ </CardContent >
261
275
</Card >
262
276
</div >
263
277
<SearchResult
@@ -266,67 +280,72 @@ onMounted(() => {
266
280
></SearchResult >
267
281
<div v-else >
268
282
<Card class =" w-full mb-6" >
269
- <CardContent class =" p-6" >
270
- <span class =" text-2xl font-bold"
271
- ><AlertCircle />
272
- 已在目前支持的所有商家都搜索了一次,但貌似找不到商品。</ span
273
- >
274
- < br />
275
- 1. 请先确认您在搜索框输入的是商品(书籍等)的< span class = " font-bold "
276
- >原文(例如:日文)标题</ span
277
- >,且输入准确无误、不是简称。 < br />如果您输入的是中文译名,您应该可以在此段文字上方的
278
- Bangumi 番组计划 信息卡片,一键复制原文标题,重新进行搜索。如果上方来自 Bangumi 番组计划
279
- 的结果有误,请自行找到正确的原文标题。
280
- < br />
281
- 2. 尝试调整搜索设置。
282
- < br />
283
- 3. 尝试只输入作品名称,或是商品名称当中较为关键的词语;搜索书籍可删去 第X卷 / X 巻
284
- 等卷数表述,改用半角数字(如:0 1 ……),或不带卷数搜索。
285
- < br />
286
- 4. 如果您访问本站的网络连接欠佳,可能也无法正常进行搜索并弹出本提示。请自行解决此类问题。
287
- <br />
288
- 5. 如果您已阅读上述提示并都尝试过,但仍然无法解决问题,请
289
- <a
290
- href =" https://github.com/YurierDept/get-bonus/issues"
291
- target =" _blank"
292
- class =" color-blue"
293
- >提交 Issue</a
294
- >
295
- 给开发者,开发者会协助解决。
296
- </CardContent >
283
+ <CardContent class =" p-6" >
284
+ <span class =" text-2xl font-bold"
285
+ ><AlertCircle /> 已在目前支持的所有商家都搜索了一次,但貌似找不到商品。</ span
286
+ >
287
+ < br / >
288
+ 1. 请先确认您在搜索框输入的是商品(书籍等)的< span class = " font-bold "
289
+ >原文(例如:日文)标题</ span
290
+ >,且输入准确无误、不是简称。 < br />如果您输入的是中文译名,您应该可以在此段文字上方的
291
+ Bangumi 番组计划 信息卡片,一键复制原文标题,重新进行搜索。如果上方来自 Bangumi
292
+ 番组计划 的结果有误,请自行找到正确的原文标题。
293
+ < br />
294
+ 2. 尝试调整搜索设置。
295
+ < br />
296
+ 3. 尝试只输入作品名称,或是商品名称当中较为关键的词语;搜索书籍可删去 第X卷 / X 巻
297
+ 等卷数表述,改用半角数字(如:0 1 ……),或不带卷数搜索。
298
+ < br />
299
+ 4.
300
+ 如果您访问本站的网络连接欠佳,可能也无法正常进行搜索并弹出本提示。请自行解决此类问题。
301
+ <br />
302
+ 5. 如果您已阅读上述提示并都尝试过,但仍然无法解决问题,请
303
+ <a
304
+ href =" https://github.com/YurierDept/get-bonus/issues"
305
+ target =" _blank"
306
+ class =" color-blue"
307
+ >提交 Issue</a
308
+ >
309
+ 给开发者,开发者会协助解决。
310
+ </CardContent >
297
311
</Card >
298
312
</div >
299
313
</div >
300
314
<div v-else-if =" details && foundNums === 0" >
301
315
<Card class =" w-full mb-6" >
302
- <CardContent class =" p-6" >
303
- <span class =" text-2xl font-bold" >
304
- <AlertCircle />
305
- 没有搜索结果。</span ><br />
306
- 无法在 Bangumi 番组计划 与所有支持的商家找到任何符合搜索关键词的作品与商品。
307
- <br />
308
- 1. 请先确认您在搜索框输入的是商品(书籍等)的<span class =" font-bold"
309
- >原文(例如:日文)标题</span
310
- >,且输入准确无误、不是简称。<br />
311
- 如果您输入的是中文译名,想用中文译名来查原文(例如:日文)标题,请注意您输入的中文译名需要完整、输入准确无误,<span
312
- class =" font-bold"
313
- >同样不能是简称</span
314
- >。
315
- <br />
316
- 2. 尝试调整搜索设置。
317
- <br />
318
- 3. 尝试只输入作品名称,或是商品名称当中较为关键的词语;搜索书籍可删去 第X卷 / X 巻
319
- 等卷数表述,改用半角数字(如:0 1 ……),或不带卷数搜索。
320
- <br />
321
- 4. 如果您访问本站的网络连接欠佳,可能也无法正常进行搜索并弹出本提示。请自行解决此类问题。
322
- <br />
323
- 5. 如果您已阅读上述提示并都尝试过,但仍然无法解决问题(例如:使用相同关键词在 Bangumi
324
- 番组计划 或支持的商家可以搜到商品,但这里无法搜到),请
325
- <a href =" https://github.com/YurierDept/get-bonus/issues" target =" _blank" class =" color-blue"
326
- >提交 Issue</a
327
- >
328
- 给开发者,开发者会协助解决。
329
- </CardContent >
316
+ <CardContent class =" p-6" >
317
+ <span class =" text-2xl font-bold" >
318
+ <AlertCircle />
319
+ 没有搜索结果。</span
320
+ ><br />
321
+ 无法在 Bangumi 番组计划 与所有支持的商家找到任何符合搜索关键词的作品与商品。
322
+ <br />
323
+ 1. 请先确认您在搜索框输入的是商品(书籍等)的<span class =" font-bold"
324
+ >原文(例如:日文)标题</span
325
+ >,且输入准确无误、不是简称。<br />
326
+ 如果您输入的是中文译名,想用中文译名来查原文(例如:日文)标题,请注意您输入的中文译名需要完整、输入准确无误,<span
327
+ class =" font-bold"
328
+ >同样不能是简称</span
329
+ >。
330
+ <br />
331
+ 2. 尝试调整搜索设置。
332
+ <br />
333
+ 3. 尝试只输入作品名称,或是商品名称当中较为关键的词语;搜索书籍可删去 第X卷 / X 巻
334
+ 等卷数表述,改用半角数字(如:0 1 ……),或不带卷数搜索。
335
+ <br />
336
+ 4.
337
+ 如果您访问本站的网络连接欠佳,可能也无法正常进行搜索并弹出本提示。请自行解决此类问题。
338
+ <br />
339
+ 5. 如果您已阅读上述提示并都尝试过,但仍然无法解决问题(例如:使用相同关键词在 Bangumi
340
+ 番组计划 或支持的商家可以搜到商品,但这里无法搜到),请
341
+ <a
342
+ href =" https://github.com/YurierDept/get-bonus/issues"
343
+ target =" _blank"
344
+ class =" color-blue"
345
+ >提交 Issue</a
346
+ >
347
+ 给开发者,开发者会协助解决。
348
+ </CardContent >
330
349
</Card >
331
350
</div >
332
351
<div v-else >
0 commit comments