赞
踩
这段代码是一个简单的网页应用,使用了 Vue.js 和 Element UI 库,用于查询一组问题的答案并显示结果。让我解释一下主要的部分和功能:
HTML 结构和样式:
<el-container>
, <el-header>
, <el-main>
, <el-form>
, <el-input>
, <el-button>
, <el-card>
, 和 <el-dialog>
,用来构建页面布局和交互元素。.success
和 .failure
用来根据答案是否成功显示不同的背景颜色。Vue 实例:
<script>
标签中创建了一个 Vue 实例,绑定到 #app
元素上。data
选项来定义了 form
对象(包含 questions
属性)、answers
数组(用于存储问题和答案)、loading
状态(用于显示加载动画)。方法:
queryAnswers()
方法用于处理用户点击“查询答案”按钮的事件。
loading
状态为 true
,准备开始加载数据。axios
库发送多个并发请求(每个问题一个请求),并将结果存入 promises
数组中。Promise.all()
等待所有请求完成后更新 answers
数组。loading
状态为 false
,结束加载过程。clearInputs()
方法用于清空输入框和答案列表。
引用的库:
- 使用了
- Vue.js (<script src="https://cdn.jsdelivr.net/npm/vue@2"></script>)、
- Element UI (<link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
- 和
-
- <script src="https://unpkg.com/element-ui/lib/index.js"></script>)
- 以及 Axios (<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>)。
总体来说,这段代码实现了一个简单的前端页面,用户可以输入问题并查询答案,同时展示加载过程和查询结果。
完整代码:
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>问题查询答案</title>
- <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
- <style>
- #app {
- padding: 20px;
- }
- .el-header {
- background-color: #3a7ca5;
- color: #333;
- line-height: 60px;
- text-align: center;
- font-size: 24px;
- font-weight: bold;
- box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
- border-bottom: 3px solid #f0f0f0;
- }
- .el-main {
- padding: 20px;
- }
- .el-card {
- margin-top: 20px;
- }
- .buttons {
- margin-top: 10px;
- }
- .success {
- background-color: #d4edda;
- color: #155724;
- padding: 10px;
- border-radius: 5px;
- }
- .failure {
- background-color: #f8d7da;
- color: #721c24;
- padding: 10px;
- border-radius: 5px;
- }
- .el-textarea__inner {
- min-height: 150px; /* 增加初始高度 */
- border-radius: 8px;
- border: 1px solid #dcdfe6;
- padding: 10px;
- font-size: 16px;
- line-height: 1.5;
- box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1);
- }
- .el-textarea__inner:focus {
- border-color: #3a7ca5;
- }
- </style>
- </head>
- <body>
- <div id="app">
- <el-container>
- <el-header>
- <h1>问题查询答案</h1>
- </el-header>
- <el-main>
- <el-form ref="form" :model="form">
- <el-form-item label="问题 (每行一个问题)">
- <el-input type="textarea" v-model="form.questions" :autosize="{ minRows: 6, maxRows: 10 }"></el-input>
- </el-form-item>
- <el-form-item>
- <el-button type="primary" @click="queryAnswers">查询答案</el-button>
- <el-button type="danger" @click="clearInputs">清空</el-button>
- </el-form-item>
- </el-form>
- <el-card v-if="answers.length">
- <ul>
- <li v-for="(answer, index) in answers" :key="index" :class="{'success': answer.a !== '查询失败', 'failure': answer.a === '查询失败'}">
- <strong>问题:</strong> {{ answer.q }}<br>
- <strong>答案:</strong> {{ answer.a }}
- </li>
- </ul>
- </el-card>
- <el-dialog :visible.sync="loading" title="加载中">
- <div style="text-align: center;">
- <el-loading :fullscreen="true" text="数据查询中..."></el-loading>
- </div>
- </el-dialog>
- </el-main>
- </el-container>
- </div>
- <script src="https://cdn.jsdelivr.net/npm/vue@2"></script>
- <script src="https://unpkg.com/element-ui/lib/index.js"></script>
- <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
- <script>
- new Vue({
- el: '#app',
- data() {
- return {
- form: {
- questions: ''
- },
- answers: [],
- loading: false
- };
- },
- methods: {
- async queryAnswers() {
- const questions = this.form.questions.split('\n').filter(q => q.trim() !== '');
-
- if (questions.length === 0) {
- this.$message.error('请输入至少一个问题');
- return;
- }
-
- this.loading = true;
- this.answers = [];
-
- try {
- const promises = questions.map(async q => {
- const url = `YOURAPI?q=${encodeURIComponent(q.trim())}`;
- try {
- const response = await axios.get(url);
- if (response.status === 200) {
- return { q: q.trim(), a: response.data.answer };
- } else {
- return { q: q.trim(), a: '查询失败' };
- }
- } catch {
- return { q: q.trim(), a: '查询失败' };
- }
- });
-
- this.answers = await Promise.all(promises);
- } catch (error) {
- this.$message.error('查询过程中出现错误');
- } finally {
- this.loading = false;
- }
- },
- clearInputs() {
- this.form.questions = '';
- this.answers = [];
- }
- }
- });
- </script>
- </body>
- </html>
效果:
更换成自己的题库接口就可以
想赞助一下就用我的接口吧嘻嘻嘻
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。