当前位置:   article > 正文

一个页面实现批量查网课答案_网页答题如何通过代码看答案

网页答题如何通过代码看答案

这段代码是一个简单的网页应用,使用了 Vue.js 和 Element UI 库,用于查询一组问题的答案并显示结果。让我解释一下主要的部分和功能:

  1. HTML 结构和样式

    • 使用了 Element UI 的组件和样式,如 <el-container>, <el-header>, <el-main>, <el-form>, <el-input>, <el-button>, <el-card>, 和 <el-dialog>,用来构建页面布局和交互元素。
    • 自定义了一些样式,如 .success.failure 用来根据答案是否成功显示不同的背景颜色。
  2. Vue 实例

    • <script> 标签中创建了一个 Vue 实例,绑定到 #app 元素上。
    • 使用了 Vue 的 data 选项来定义了 form 对象(包含 questions 属性)、answers 数组(用于存储问题和答案)、loading 状态(用于显示加载动画)。
  3. 方法

    • queryAnswers() 方法用于处理用户点击“查询答案”按钮的事件。

      • 首先从输入框中获取用户输入的问题列表,并且过滤空白行。
      • 如果问题为空,显示错误消息。
      • 设置 loading 状态为 true,准备开始加载数据。
      • 使用 axios 库发送多个并发请求(每个问题一个请求),并将结果存入 promises 数组中。
      • 使用 Promise.all() 等待所有请求完成后更新 answers 数组。
      • 捕获可能的异常并显示“查询失败”消息。
      • 最后,无论成功或失败,设置 loading 状态为 false,结束加载过程。
    • clearInputs() 方法用于清空输入框和答案列表。

  4. 引用的库

    1. 使用了
    2. Vue.js (<script src="https://cdn.jsdelivr.net/npm/vue@2"></script>)、
    3. Element UI (<link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
    4. <script src="https://unpkg.com/element-ui/lib/index.js"></script>)
    5. 以及 Axios (<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>)。

总体来说,这段代码实现了一个简单的前端页面,用户可以输入问题并查询答案,同时展示加载过程和查询结果。

完整代码:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>问题查询答案</title>
  7. <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
  8. <style>
  9. #app {
  10. padding: 20px;
  11. }
  12. .el-header {
  13. background-color: #3a7ca5;
  14. color: #333;
  15. line-height: 60px;
  16. text-align: center;
  17. font-size: 24px;
  18. font-weight: bold;
  19. box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
  20. border-bottom: 3px solid #f0f0f0;
  21. }
  22. .el-main {
  23. padding: 20px;
  24. }
  25. .el-card {
  26. margin-top: 20px;
  27. }
  28. .buttons {
  29. margin-top: 10px;
  30. }
  31. .success {
  32. background-color: #d4edda;
  33. color: #155724;
  34. padding: 10px;
  35. border-radius: 5px;
  36. }
  37. .failure {
  38. background-color: #f8d7da;
  39. color: #721c24;
  40. padding: 10px;
  41. border-radius: 5px;
  42. }
  43. .el-textarea__inner {
  44. min-height: 150px; /* 增加初始高度 */
  45. border-radius: 8px;
  46. border: 1px solid #dcdfe6;
  47. padding: 10px;
  48. font-size: 16px;
  49. line-height: 1.5;
  50. box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1);
  51. }
  52. .el-textarea__inner:focus {
  53. border-color: #3a7ca5;
  54. }
  55. </style>
  56. </head>
  57. <body>
  58. <div id="app">
  59. <el-container>
  60. <el-header>
  61. <h1>问题查询答案</h1>
  62. </el-header>
  63. <el-main>
  64. <el-form ref="form" :model="form">
  65. <el-form-item label="问题 (每行一个问题)">
  66. <el-input type="textarea" v-model="form.questions" :autosize="{ minRows: 6, maxRows: 10 }"></el-input>
  67. </el-form-item>
  68. <el-form-item>
  69. <el-button type="primary" @click="queryAnswers">查询答案</el-button>
  70. <el-button type="danger" @click="clearInputs">清空</el-button>
  71. </el-form-item>
  72. </el-form>
  73. <el-card v-if="answers.length">
  74. <ul>
  75. <li v-for="(answer, index) in answers" :key="index" :class="{'success': answer.a !== '查询失败', 'failure': answer.a === '查询失败'}">
  76. <strong>问题:</strong> {{ answer.q }}<br>
  77. <strong>答案:</strong> {{ answer.a }}
  78. </li>
  79. </ul>
  80. </el-card>
  81. <el-dialog :visible.sync="loading" title="加载中">
  82. <div style="text-align: center;">
  83. <el-loading :fullscreen="true" text="数据查询中..."></el-loading>
  84. </div>
  85. </el-dialog>
  86. </el-main>
  87. </el-container>
  88. </div>
  89. <script src="https://cdn.jsdelivr.net/npm/vue@2"></script>
  90. <script src="https://unpkg.com/element-ui/lib/index.js"></script>
  91. <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
  92. <script>
  93. new Vue({
  94. el: '#app',
  95. data() {
  96. return {
  97. form: {
  98. questions: ''
  99. },
  100. answers: [],
  101. loading: false
  102. };
  103. },
  104. methods: {
  105. async queryAnswers() {
  106. const questions = this.form.questions.split('\n').filter(q => q.trim() !== '');
  107. if (questions.length === 0) {
  108. this.$message.error('请输入至少一个问题');
  109. return;
  110. }
  111. this.loading = true;
  112. this.answers = [];
  113. try {
  114. const promises = questions.map(async q => {
  115. const url = `YOURAPI?q=${encodeURIComponent(q.trim())}`;
  116. try {
  117. const response = await axios.get(url);
  118. if (response.status === 200) {
  119. return { q: q.trim(), a: response.data.answer };
  120. } else {
  121. return { q: q.trim(), a: '查询失败' };
  122. }
  123. } catch {
  124. return { q: q.trim(), a: '查询失败' };
  125. }
  126. });
  127. this.answers = await Promise.all(promises);
  128. } catch (error) {
  129. this.$message.error('查询过程中出现错误');
  130. } finally {
  131. this.loading = false;
  132. }
  133. },
  134. clearInputs() {
  135. this.form.questions = '';
  136. this.answers = [];
  137. }
  138. }
  139. });
  140. </script>
  141. </body>
  142. </html>

效果:

更换成自己的题库接口就可以

想赞助一下就用我的接口吧嘻嘻嘻

API接口传送门

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/寸_铁/article/detail/955116
推荐阅读
相关标签
  

闽ICP备14008679号