vue实现调查问卷一页一题,上一题下一题形式

article/2025/8/29 11:50:45

使用了vant组件的radio 单选框 官网https://youzan.github.io/vant/#/zh-CN/radio

效果图
效果图
效果图

 

做出来的效果图就是上面那样 一页一题

附上代码:

<template><div class="second"><!-- 问卷题 --><div v-for="(item,index) in questionList" :key="item.id">    <!-- 测试 --><div class="test-content" v-if="index== page"><div class="test-title" v-if="item.mqyid == 5">平和体质--健康派</div><div class="test-title" v-if="item.mqyid == 8">气虚体质--气短派</div><div class="test-title" v-if="item.mqyid == 9">阳虚体质--怕冷派</div><div class="test-title" v-if="item.mqyid == 10">痰湿体质--痰派</div><div class="test-title" v-if="item.mqyid == 11">湿热体质--长痘派</div><div class="test-title" v-if="item.mqyid == 12">血瘀体质--长斑派</div><div class="test-title" v-if="item.mqyid == 13">特禀体质---过敏派</div><div class="test-title" v-if="item.mqyid == 14">气郁体质---郁闷派</div><div class="test-title" v-if="item.mqyid == 15">阴虚体质---缺水派</div><div class="content-title">{{index+1}}.{{item.question}}</div><van-radio-group  v-model="radio"><van-radio :name="item.answer1Num  + ',' + item.id">{{item.answer1}}</van-radio><van-radio :name="item.answer2Num  + ',' + item.id">{{item.answer2}}</van-radio><van-radio :name="item.answer3Num  + ',' + item.id">{{item.answer3}}</van-radio><van-radio :name="item.answer4Num  + ',' + item.id">{{item.answer4}}</van-radio><van-radio :name="item.answer5Num  + ',' + item.id">{{item.answer5}}</van-radio></van-radio-group><div class="btn"><div class="back" @click="toBack(index)" v-if="index != 0" :class="index == 0 ? 'before-back' : 'back' ">上一题</div><div class="next" @click="toNext(index,item.id)" v-if="isShow"  :class="index == 0 ? 'next' : 'before-next'">下一题</div><!-- 提交 --><div class="next" v-if="!isShow" @click="submit(item)" :class="index == 0 ? 'next' : 'before-next'">提交</div></div></div></div></div>
</template>export default {name: 'SecondQuestionnaire',data() {return {// 当前页page: 0,// 选项radio: '',// 题目的idids: [],// 分数nums: [],// 性别gender: '',// 年龄age: '',// 存放每一题的id和numquestionInfos: [],// 当前题目的序号等于当前题目的条数isShow: true,// 获取问卷数据questionList: []}},created() {// 接受上一层传来的数据this.gender = this.$route.params.genderthis.age = this.$route.params.age// 获取问卷数据this.getQuestion()},methods: {// 获取问卷数据async getQuestion() {const data = await this.$http.get('/questionList?openId=123123')if(data.status !== 200) {return this.$Toast.fail('获取调查问卷题失败')}this.questionList = data.data.question1          },// 点击下一题toNext(index, id) {// 1. 判断是否答题,没有则无法跳转到下一题if(index === 0) {if((this.radio.slice(0,1) === '' || this.radio.slice(0,1) === undefined)) {return;}} else {if(this.radio.slice(2) != id) {return;}}// 2. 保存答题数据let question = {'ids': this.radio.slice(2), 'nums': this.radio.slice(0, 1),};this.questionInfos[index] = question;this.questionInfos.forEach(questionInfo => {// console.log('questionInfo:[ids: ' + questionInfo.ids + ', nums: ' + questionInfo.nums + '] ');});// 3. index ++;index ++;// 4. 判断已答题目列表是否包含下标为index的题目,有则回显if(this.questionInfos[index] !== undefined && this.questionInfos[index] !== '') {this.radio = this.questionInfos[index].nums + ',' + this.questionInfos[index].ids;}// 5. page ++this.page ++;// 6. 其他(如按钮隐藏)// 当前页等于最后一题 下一题按钮隐藏if(this.page == this.questionList.length-1) {return this.isShow = false} else {return this.isShow = true}},// 点击上一题toBack(index) {// 1. index --;index --;// 2. 从已回答列表中获取答题数据,回显this.radio = this.questionInfos[index].nums + ',' + this.questionInfos[index].ids;// 3. 保存答题数据let question = {'ids': this.radio.slice(2), 'nums': this.radio.slice(0, 1)};this.questionInfos[index] = question;// 4. page --this.page --;},// 点击提交async submit(n) {for(var i = 0; i < this.questionInfos.length; i++) {this.ids[i] = this.questionInfos[i].idsthis.nums[i] = this.questionInfos[i].nums}// 发现点击最后一题时用户点击提交 打印出来少一条最后一页的数据  // 用户点击提交 手动将最后一条数据添加到数组中this.ids.push(this.radio.slice(2))this.nums.push(this.radio.slice(0,1))const data = await this.$http.post(`saveQuestions?openId=123123&ids=${this.ids}&nums=${this.nums}&age=${this.age}&gender=${this.gender}`)if(data.data.code == 200) {this.$router.push({name: 'Muggy',params: {typeTitle: data.data.mobuserQuestionnaireType.typeTitle,performance: data.data.mobuserQuestionnaireType.performance,describetion: data.data.mobuserQuestionnaireType.describetion,method: data.data.mobuserQuestionnaireType.method}})}},}
}

 


http://chatgpt.dhexx.cn/article/j1yQdmqy.shtml

相关文章

leetcode每日一题

目录 &#x1f3c6;重新格式化电话号码 &#x1f453;①麻烦解法 &#x1f453;②使用库函数降维打击 每日鸡汤&#xff1a; &#x1f680;有志者自有千计万计&#xff0c;无志者只感千难万难。 &#x1f3c6;重新格式化电话号码 给你一个字符串形式的电话号码 number 。n…

题题题题题1

js 基本数据类型 7 种原始类型Boolean、Number、String、Null、Undefined、Symbol&#xff08;es6&#xff09;、BigInt、Object Symbol的理解 symbol是在es6中引入的基本数据类型、它表示的是一个独一无二的值&#xff0c;主要是来解决命名冲突的问题&#xff0c;它的使用场…

下午第一题

2017上半年 阅读下列说明和图&#xff0c;回答问题1至问题4&#xff0c;将解答填入答题纸的对应栏内。 【说明】 某医疗器械公司作为复杂医疗产品的集成商&#xff0c;必须保持高质量部件的及时供应。为了实现这一目标&#xff0c;该公司欲开发一采购系统。系统的主要功能如下:…

JS实现答题上一题下一题

以下是实现效果图 JS块代码 var TRUE_COUNT 0//正确的题数var count 10;//当前所在题数var thisURL document.URL;var getval thisURL.split(?)[1];var titleType getval.split("")[1];//获取题目typevar class_radio "selection";//选择按钮var ur…

js、jq实现答题上一题下一题

一、以下是效果图 说明&#xff1a;第一题只有一个“下一题”按钮&#xff0c;中间题目有两个按钮“上一题”“下一题”&#xff0c;最后一题按钮改为“提交”&#xff1b; 二、代码 js代码&#xff08;jquery需要自行引入&#xff09; var number document.getElementsByCl…

vue 简单实现上一题下一题问答效果

1.先来看下效果&#xff08;左上展示题目数量以及当前题序号&#xff0c;当第一题时只有下一题按钮&#xff0c;未回答问题时无法点击下一题&#xff0c;且回答结果展示错误或正确的颜色&#xff09; ​​​​ 2.接下来我们来看下html是怎么写的吧 <!-- 左边数据 --><…

MybatisPlus自动填充(建立、更新时间)

准备 1、建立user表 DROP TABLE IF EXISTS user;CREATE TABLE user (id BIGINT(20) NOT NULL COMMENT 主键ID,name VARCHAR(30) NULL DEFAULT NULL COMMENT 姓名,age INT(11) NULL DEFAULT NULL COMMENT 年龄,email VARCHAR(50) NULL DEFAULT NULL COMMENT 邮箱,PRIMARY KEY …

Jpa配置实体类创建时间更新时间自动赋值,@CreateDate,@LastModifiedDate

操作数据库映射实体类时&#xff0c;通常需要记录createTime和updateTime&#xff0c;如果每个对象新增或修改去都去手工操作创建时间、更新时间&#xff0c;会显得比较繁琐。 Springboot jpa提供了自动填充这两个字段的功能&#xff0c;简单配置一下即可。CreatedDate、LastM…

win10如何关闭自动更新及修改更新时间

关于win10如何关闭自动更新&#xff0c;有以下三个方法&#xff0c;但其效果明显不同。 当然&#xff0c;可用度最高的肯定放到最前面。 其中方法一实用性最强&#xff0c;方法二有时候没什么用&#xff0c;方法三可以延缓较长一段时间更新&#xff0c;方法四可以设置更新时间…

mybatis自动生成更新时间和创建时间

开发中&#xff0c;每次修改数据或者添加一条数据都要手动改变一次创建时间或者更新时间&#xff0c;有一说一挺麻烦的 数据表里面的创建时间和更改时间字段 更新update和insert要想自动生成的话实体类要加上TableField 然后创建MyMetaObjectHandler类&#xff0c;实现Meta…

Ubuntu修改时区和更新时间

更新时区 先查看当前系统时间 rootubuntu:/# date -R Thu, 12 Aug 2021 01:41:48 0000 结果时区是&#xff1a;-0000 我需要的是东八区&#xff0c;这儿显示不是&#xff0c;所以需要设置一个时区 运行tzselect tzselect在这里我们选择亚洲 Asia&#xff0c;确认之后选择中…

MySQL 设置 创建时间 和 更新时间

在实际应用中&#xff0c;我们时常会需要用到创建时间和更新时间这两个字段&#xff0c;下面记录一下&#xff1a; 第一种 &#xff1a; 命令行创建&#xff08;推荐&#xff09; CREATE TABLE user_info (uid varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT…

MySQL中创建时间和更新时间的自动更新

一、需求 当新增记录的时候&#xff0c;MySQL自动将系统的当前时间 set 到创建时间和更新时间这两个字段中。 当更新记录的时候&#xff0c;MySQL 只 update 更新时间字段的时间&#xff0c;而不修改创建时间字段对应的值。 二、方案 找到表中对应的创建时间和更新时间的字段…

Mysql设置自动更新时间

假设建表包括如下字段&#xff1a; id&#xff1a;主键ID create_time: 创建时间 update_time: 修改时间 如何创建table可以使得&#xff1a; 在插入记录时create_time、update_time默认为当前时间&#xff1b;在修改记录时update_time自动更新为当前时间&#xff1b; 建表语…

postgresql设置自动更新时间方法

在我们日常开发中&#xff0c;在设计数据库字段的时候不可避免的都要created_time&#xff08;创建时间&#xff09;以及updated_time&#xff08;修改时间&#xff09;两个时间戳字段&#xff0c;作用大家也都一目了然。下面将为大家详细介绍两个字段的如何去设置来达到你想要…

centos 7 更新时间和更新时区

使用 date 命令 查看当前centos7服务器的时间&#xff0c;发现当前时间与实际实际不同步。 1、下载ntpdate工具&#xff0c;使用该工具可以与时间服务器同步。 yum -y install ntp ntpdate 2、设置系统时间与网络时间同步。 ntpdate cn.pool.ntp.org 3.将系统时间写入硬件时间…

阿里国际站各数据更新时间汇总

2B平台运营 Michael Dai 1个月前 (11-10) 71次浏览 2个评论 扫描二维码 [编辑] 阿里国际站各数据更新时间汇总 昨天下午在查看关键词花费时突然发现已经过了下午3点了&#xff0c;但是关键词的推广计划没有重新开始&#xff0c;这时我才意识到直通车各计划的更新时间应该开…

MySQL中更新时间字段的更新时点问题

我们在设计表时&#xff0c;通常为了记录数据插入和更新的时间&#xff0c;会定义两个字段&#xff0c;create_time/insert_time和update_time&#xff0c;按照需求&#xff0c;记录插入的时间&#xff0c;会存储到create_time/insert_time字段中&#xff0c;记录更新的时间&am…

hexo添加文章更新时间

修改&#xff08;博客主目录&#xff09;/themes/next/layout/_macro/post.swig 文件&#xff0c;在<span class"post-time">...</span>标签后添加 {%if post.updated and post.updated > post.date%}<span class"post-updated"> |…

win10 更新计算机时间,win10更新时间太长怎么回事_windows10更新时间太久解决教程...

在使用win10系统的时候&#xff0c;经常会需要电脑进行更新&#xff0c;而我们会发现每次更新都会耗时1-2个小时时间。让人等的不耐烦&#xff0c;遇到win10更新时间太长怎么回事呢&#xff1f;接下来给大家分享一下windows10更新时间太久解决教程吧。 具体方法如下&#xff1a…