mirror of
				https://github.com/nonebot/nonebot2.git
				synced 2025-10-27 04:56:39 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			191 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
			
		
		
	
	
			191 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
| <template>
 | |
|   <v-card flat class="bots">
 | |
|     <v-row>
 | |
|       <v-col cols="12" sm="6">
 | |
|         <v-text-field
 | |
|           v-model="filterText"
 | |
|           dense
 | |
|           rounded
 | |
|           outlined
 | |
|           clearable
 | |
|           hide-details
 | |
|           label="搜索机器人"
 | |
|         >
 | |
|           <template v-slot:prepend-inner>
 | |
|             <div class="v-input__icon v-input__icon--prepend-inner">
 | |
|               <v-icon small>fa-filter</v-icon>
 | |
|             </div>
 | |
|           </template>
 | |
|         </v-text-field>
 | |
|       </v-col>
 | |
|       <v-col cols="12" sm="6">
 | |
|         <v-dialog v-model="dialog" max-width="600px">
 | |
|           <template v-slot:activator="{ on, attrs }">
 | |
|             <v-btn dark block color="primary" v-bind="attrs" v-on="on"
 | |
|               >发布机器人
 | |
|             </v-btn>
 | |
|           </template>
 | |
|           <v-card>
 | |
|             <v-card-title>
 | |
|               <span class="headline">机器人信息</span>
 | |
|             </v-card-title>
 | |
|             <v-card-text>
 | |
|               <v-form ref="newBotForm" v-model="valid" lazy-validation>
 | |
|                 <v-container>
 | |
|                   <v-row>
 | |
|                     <v-col cols="12">
 | |
|                       <v-text-field
 | |
|                         v-model="newBot.name"
 | |
|                         label="机器人名称"
 | |
|                         required
 | |
|                       ></v-text-field>
 | |
|                     </v-col>
 | |
|                     <v-col cols="12">
 | |
|                       <v-text-field
 | |
|                         v-model="newBot.desc"
 | |
|                         label="机器人介绍"
 | |
|                         required
 | |
|                       ></v-text-field>
 | |
|                     </v-col>
 | |
|                     <v-col cols="12">
 | |
|                       <v-text-field
 | |
|                         v-model="newBot.repo"
 | |
|                         label="仓库/主页链接"
 | |
|                         required
 | |
|                       ></v-text-field>
 | |
|                     </v-col>
 | |
|                   </v-row>
 | |
|                 </v-container>
 | |
|               </v-form>
 | |
|             </v-card-text>
 | |
|             <v-card-actions>
 | |
|               <v-spacer></v-spacer>
 | |
|               <v-btn color="blue darken-1" text @click="dialog = false">
 | |
|                 关闭
 | |
|               </v-btn>
 | |
|               <v-btn
 | |
|                 :disabled="!valid"
 | |
|                 color="blue darken-1"
 | |
|                 text
 | |
|                 @click="
 | |
|                   dialog = false;
 | |
|                   publishBot();
 | |
|                 "
 | |
|               >
 | |
|                 发布
 | |
|               </v-btn>
 | |
|             </v-card-actions>
 | |
|           </v-card>
 | |
|         </v-dialog>
 | |
|       </v-col>
 | |
|     </v-row>
 | |
|     <v-row>
 | |
|       <v-col cols="12">
 | |
|         <v-pagination
 | |
|           v-model="page"
 | |
|           :length="pageNum"
 | |
|           prev-icon="fa-caret-left"
 | |
|           next-icon="fa-caret-right"
 | |
|         ></v-pagination>
 | |
|       </v-col>
 | |
|     </v-row>
 | |
|     <v-row>
 | |
|       <v-col cols="12" sm="6" v-for="(bot, index) in displayBots" :key="index">
 | |
|         <PublishCard
 | |
|           :name="bot.name"
 | |
|           :desc="bot.desc"
 | |
|           :author="bot.author"
 | |
|           :link="bot.repo"
 | |
|         ></PublishCard>
 | |
|       </v-col>
 | |
|     </v-row>
 | |
|     <v-row>
 | |
|       <v-col cols="12">
 | |
|         <v-pagination
 | |
|           v-model="page"
 | |
|           :length="pageNum"
 | |
|           prev-icon="fa-caret-left"
 | |
|           next-icon="fa-caret-right"
 | |
|         ></v-pagination>
 | |
|       </v-col>
 | |
|     </v-row>
 | |
|   </v-card>
 | |
| </template>
 | |
| 
 | |
| <script>
 | |
| import PublishCard from "./PublishCard.vue";
 | |
| import bots from "../public/bots.json";
 | |
| 
 | |
| export default {
 | |
|   name: "Bots",
 | |
|   components: {
 | |
|     PublishCard,
 | |
|   },
 | |
|   data() {
 | |
|     return {
 | |
|       bots: bots,
 | |
|       filterText: "",
 | |
|       page: 1,
 | |
|       dialog: false,
 | |
|       valid: false,
 | |
|       newBot: {
 | |
|         name: null,
 | |
|         desc: null,
 | |
|         repo: null,
 | |
|       },
 | |
|     };
 | |
|   },
 | |
|   computed: {
 | |
|     pageNum() {
 | |
|       return Math.ceil(this.filteredBots.length / 10);
 | |
|     },
 | |
|     filteredBots() {
 | |
|       return this.bots.filter((bot) => {
 | |
|         return (
 | |
|           bot.name.indexOf(this.filterText || "") != -1 ||
 | |
|           bot.desc.indexOf(this.filterText || "") != -1 ||
 | |
|           bot.author.indexOf(this.filterText || "") != -1
 | |
|         );
 | |
|       });
 | |
|     },
 | |
|     displayBots() {
 | |
|       return this.filteredBots.slice((this.page - 1) * 10, this.page * 10);
 | |
|     },
 | |
|     publishBot() {
 | |
|       if (!this.$refs.newBotForm.validate()) {
 | |
|         return;
 | |
|       }
 | |
|       const title = encodeURIComponent(`Bot: ${this.newBot.name}`).replace(
 | |
|         /%2B/gi,
 | |
|         "+"
 | |
|       );
 | |
|       const body = encodeURIComponent(
 | |
|         `
 | |
| **机器人名称:**
 | |
| 
 | |
| ${this.newBot.name}
 | |
| 
 | |
| **机器人功能:**
 | |
| 
 | |
| ${this.newBot.desc}
 | |
| 
 | |
| **机器人项目仓库/主页链接:**
 | |
| 
 | |
| ${this.newBot.repo}
 | |
| 
 | |
| <!-- DO NOT EDIT ! -->
 | |
| <!--
 | |
| - name: ${this.newBot.name}
 | |
| - desc: ${this.newBot.desc}
 | |
| - repo: ${this.newBot.repo}
 | |
| -->
 | |
| `.trim()
 | |
|       ).replace(/%2B/gi, "+");
 | |
|       window.open(
 | |
|         `https://github.com/nonebot/nonebot2/issues/new?title=${title}&body=${body}&labels=Bot`
 | |
|       );
 | |
|     },
 | |
|   },
 | |
| };
 | |
| </script>
 |