插件商店及资源商店新增搜索功能

This commit is contained in:
远野千束 2024-07-14 13:38:25 +08:00
parent 605dd035d4
commit c36a925bb5
5 changed files with 88 additions and 18 deletions

View File

@ -1,25 +1,48 @@
<script setup lang="ts"> <script setup lang="ts">
import {ref} from 'vue' import {computed, ref} from 'vue'
import ItemCard from './PluginItemCard.vue' import ItemCard from './PluginItemCard.vue'
let filteredItems = computed(() => {
if (!search.value) {
return items.value
}
return items.value.filter(item =>
item.name.toLowerCase().includes(search.value.toLowerCase()) ||
item.desc.toLowerCase().includes(search.value.toLowerCase()) ||
item.author.toLowerCase().includes(search.value.toLowerCase()) ||
item.module_name.toLowerCase().includes(search.value.toLowerCase())
)
})
// Nonebot // Nonebot
let items = ref([]) let items = ref([])
let search = ref('')
//
fetch('/assets/plugins.json')
.then(response => response.json())
.then(data => {
items.value = data
})
//
fetch('https://registry.nonebot.dev/plugins.json') fetch('https://registry.nonebot.dev/plugins.json')
.then(response => response.json()) .then(response => response.json())
.then(data => { .then(data => {
items.value = data items.value = items.value.concat(data)
}) })
.catch(error => console.error(error))
</script> </script>
<template> <template>
<div> <div>
<h1>插件商店</h1> <h1>插件商店</h1>
<p>所有内容来自<a href="https://nonebot.dev/store/plugins">NoneBot插件商店</a>在此仅作引用具体请访问NoneBot插件商店</p> <p>内容来自<a href="https://nonebot.dev/store/plugins">NoneBot插件商店</a>和轻雪商店在此仅作引用具体请访问NoneBot插件商店</p>
<!-- 搜索框-->
<input class="item-search-box" type="text" placeholder="搜索插件" v-model="search"/>
<div class="market"> <div class="market">
<!-- 布局商品--> <!-- 使用filteredItems来布局商品 -->
<ItemCard v-for="item in items" :key="item.id" :item="item"/> <ItemCard v-for="item in filteredItems" :key="item.id" :item="item"/>
</div> </div>
</div> </div>
</template> </template>

View File

@ -1,14 +1,25 @@
<script setup lang="ts"> <script setup lang="ts">
import {ref} from 'vue' import {computed, ref} from 'vue'
import ItemCard from './ResItemCard.vue' import ItemCard from './ResItemCard.vue'
// public/assets/resources.json // public/assets/resources.json
let filteredItems = computed(() => {
if (!search.value) {
return items.value
}
return items.value.filter(item =>
item.name.toLowerCase().includes(search.value.toLowerCase()) ||
item.description.toLowerCase().includes(search.value.toLowerCase()) ||
item.author.toLowerCase().includes(search.value.toLowerCase())
)
})
// Nonebot
let items = ref([]) let items = ref([])
let search = ref('')
fetch('/assets/resources.json') fetch('/assets/resources.json')
.then(response => response.json()) .then(response => response.json())
.then(data => { .then(data => {
items.value = data items.value = data
}) })
.catch(error => console.error(error)) .catch(error => console.error(error))
@ -17,9 +28,14 @@ fetch('/assets/resources.json')
<template> <template>
<div> <div>
<h1>主题/资源商店</h1> <h1>主题/资源商店</h1>
<!-- <div class="market">-->
<!--&lt;!&ndash; 布局商品&ndash;&gt;-->
<!-- <ItemCard v-for="item in [...items].reverse()" :key="item.id" :item="item" />-->
<!-- </div>-->
<input class="item-search-box" type="text" placeholder="搜索资源" v-model="search" />
<div class="market"> <div class="market">
<!-- 布局商品--> <!-- 使用filteredItems来布局商品 -->
<ItemCard v-for="item in [...items].reverse()" :key="item.id" :item="item" /> <ItemCard v-for="item in filteredItems" :key="item.id" :item="item"/>
</div> </div>
</div> </div>
</template> </template>

View File

@ -0,0 +1,23 @@
[
{
"module_name": "nonebot_plugin_status",
"project_link": "nonebot-plugin-status",
"name": "测试",
"desc": "测试",
"author": "snowykami",
"homepage": "https://github.com/nonebot/plugin-status",
"tags": [
{
"label": "server",
"color": "#aeeaa8"
}
],
"is_official": true,
"type": "application",
"supported_adapters": null,
"valid": true,
"version": "0.8.1",
"time": "2024-03-04T06:57:10.250823Z",
"skip_test": false
}
]

View File

@ -30,12 +30,13 @@ code {
} }
.theme-hope-content pre { .theme-hope-content pre {
overflow: auto; overflow: auto;
margin: 0 0; margin: 0 0;
padding: 1rem; padding: 1rem;
border-radius: 6px; border-radius: 6px;
line-height: 1.375; line-height: 1.375;
} }
// 移除该before // 移除该before
.theme-hope-content pre::before { .theme-hope-content pre::before {
content: none; content: none;
@ -44,7 +45,7 @@ code {
.theme-hope-content > div[class*=language-] { .theme-hope-content > div[class*=language-] {
margin: 0 0 0 0; margin: 0 0 0 0;
// 仅下半部分有圆弧 // 仅下半部分有圆弧
border-radius: 0 0 var(--code-window-border-radius) var(--code-window-border-radius); border-radius: 0 0 var(--code-window-border-radius) var(--code-window-border-radius);
} }
.tab { .tab {
@ -74,8 +75,16 @@ code {
aspect-ratio: 1/1; aspect-ratio: 1/1;
} }
.tab-title{ .tab-title {
text-align: center; text-align: center;
justify-content: center; justify-content: center;
flex: 1; flex: 1;
}
.item-search-box {
border-radius: 100px;
width: 100%;
padding: 10px;
margin: 10px 0;
border: 1px solid #ccc;
} }

View File

@ -25,5 +25,4 @@ if __name__ == "__mp_main__":
if __name__ == "__main__": if __name__ == "__main__":
# Start as __main__ # Start as __main__
from src.utils.base.reloader import Reloader from src.utils.base.reloader import Reloader
nonebot.run() nonebot.run()