微信小程序开发 调查问卷

1. 需求

  开发一个“调查问卷”的案例来学习常用表单组件的使用,收集用户填写胡表单信息提交给服务器,或者从服务器获取数据后显示在表单中。调查问卷分为单选、多选、单行填空、多行填空,选项为必填时候,提交弹出必填项未提交提示。
在这里插入图片描述
在这里插入图片描述

2. 完整代码

2.1. questionnaire.wxml

<view class="quest_layout">
  <view wx:for="{{quest}}" wx:key="id" wx:for-index="outterIndex">
    <!-- 标题 -->
    <view class="quest_item_title">
      <view class="{{((item.isMust=='Y'))?'quest_item_mark_red':'quest_item_mark_invisible'}}">*</view>
      <text>{{outterIndex+1}}.</text>
      <text wx:if="{{item.type==1}}">(单选)</text>
      <view wx:else="">
        <text wx:if="{{item.type==2}}">(多选)</text>
        <text wx:else="">(填空)</text>
      </view>

      <text>{{item.question}}</text>
    </view>
    <!-- 选项(单选、多选) -->
    <view wx:if="{{(item.type==1)||(item.type==2)}}">
      <view class="quest_item_option_layout {{item.selected?'quest_item_option_active':''}}" wx:for="{{item.answers}}" wx:key="content" bindtap="answerSelected" data-outidx='{{outterIndex}}' data-idx="{{index}}">
        <text>{{item.index}}.</text>
        <text> {{item.content}}</text>
      </view>
    </view>
    <!-- 单行填空 -->
    <view wx:if="{{item.type==3}}">
      <input class="quest_item_inpt_layout" bindinput='inputWatch' data-index='{{outterIndex}}' type='text' placeholder='请填写{{item.question}}'></input>
    </view>
    <!-- 多行填空 -->
    <view  wx:if="{{item.type==4}}" class="item_input_area_layout">
      <textarea class="item_input_area_content" bindinput="inputWatch" data-index='{{outterIndex}}'   rows="5" cols='0' placeholder="请输入{{item.question}}" maxlength="1000">
        </textarea>
    </view>
  </view>
  <view class="submit_btn" bindtap="submit">提交</view>
</view>

2.2. questionnaire.wxss

/* pages/questionnaire3/questionnaire3.wxss */
page {
  background-color: #eeeeee;
  padding: 20rpx 0;
}

.quest_layout {
  overflow: hidden;
  width: 90%;
  margin: 20rpx 2.6%;
  padding: 20rpx;
  background-color: white;
  border-radius: 20rpx;
}

.quest_item_title {
  display: flex;
  flex-direction: row;
  color: #000000;
  font-size: 34rpx;
  margin-top: 30rpx;
}

.quest_item_mark_red {
  color: red;
}

.quest_item_mark_invisible {
  color: #00000000;
}

.quest_item_option_layout {
  color: #000000;
  font-size: 32rpx;
  margin-top: 10rpx;
}

.quest_item_option_active {
  color: red;
}

.quest_item_inpt_layout {
  color: #333;
  font-size: 32rpx;
  border: solid 1rpx #e1e1e1;
  margin-top: 10rpx;
  padding: 10rpx 10rpx;
  border-radius: 8rpx;
}
.item_input_area_layout {
  border: 1rpx solid #e1e1e1;
  border-radius: 10rpx;
  padding: 8px;
  margin-top: 10rpx;
}

.item_input_area_content {
  width: 100%;
  height: 200rpx;
  color: #333;
  font-size: 32rpx;
  overflow-y: scroll;
}
.submit_btn {
  background: #00a050;
  color: white;
  margin: 50rpx;
  padding: 25rpx;
  border-radius: 10rpx;
  text-align: center;
}

2.3. questionnaire.js

import questionnaireJson from '../../public/json/questionnaireJson';
Page({

  /**
   * 页面的初始数据
   */
  data: {
    quest: questionnaireJson.data.quest
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {

  },
  /**
   * 点击(单选、多选)问题答案触发事件
   */
  answerSelected(e) {
    let outidx = e.currentTarget.dataset.outidx;
    let idx = e.currentTarget.dataset.idx;
    let question = this.data.quest[outidx];
    if (question.type == 1) { //单选
      for (let item of question.answers) {
        item.selected = false;
      }
      question.answers[idx].selected = true;
      this.setData({
        quest: this.data.quest
      });
    } else if (question.type == 2) { //多选
      question.answers[idx].selected = !question.answers[idx].selected;
      this.setData({
        quest: this.data.quest
      });
    }
  },
  /**
   * 监听输入
   */
  inputWatch: function (e) {
    var that=this;
    var index = e.currentTarget.dataset.index
    var value = e.detail.value
    that.data.quest[index].answers=value
  },
  // 点击提交按钮
  submit() {
    let {
      quest
    } = this.data;
    //用来保存选中的答案
    let answerSelected = [];
    console.log("=quest=", quest);
    for (let questItem of quest) {
      if (questItem.type == 1) { //处理单选题
        let isSelected = false;
        for (let answerItem of questItem.answers) {
          if (answerItem.selected) {
            //答案被选中
            isSelected = true;
            var itemObj = {}
            itemObj.key = questItem.id
            itemObj.value = answerItem.index
            answerSelected.push(itemObj);
          }
        }
        if (!isSelected) { //如果一个都没选
          if (questItem.isMust == 'Y') {
            wx.showToast({
              title: questItem.question + '必须选择',
              icon: 'none'
            })
            return
          } else {
            var itemObj = {}
            itemObj.key = questItem.id
            itemObj.value = ''
            answerSelected.push(itemObj);
          }
        }
      } else if (questItem.type == 2) { //处理多选题
        let isSelected = false;
        var itemValue = ''
        var itemObj = {}
        itemObj.key = questItem.id
        for (let answerItem of questItem.answers) {
          if (answerItem.selected) { //答案被选中
            isSelected = true;
            if (itemValue) {
              itemValue = itemValue + ',' + answerItem.index
            } else {
              itemValue = itemValue + answerItem.index
            }
          }
        }
        itemObj.value = itemValue
        answerSelected.push(itemObj);
        if (!isSelected) { //如果一个都没选
          if (questItem.isMust == 'Y') {
            wx.showToast({
              title: questItem.question + '必须选择',
              icon: 'none'
            })
            return
          }
          answerSelected.push(itemObj);
        }
      } else if (questItem.type == 3) { //处理单行填空题
        if (questItem.isMust == 'Y') {
          if(!questItem.answers){
            wx.showToast({
              title: questItem.question + '必须填写',
              icon: 'none'
            })
            return
          }
        }
        var itemObj = {}
        itemObj.key = questItem.id
        itemObj.value = questItem.answers
        answerSelected.push(itemObj);
      } else if (questItem.type == 4) { //处理多换填空题
        if (questItem.isMust == 'Y') {
          if(!questItem.answers){
            wx.showToast({
              title: questItem.question + '必须输入',
              icon: 'none'
            })
            return
          }
        }
        var itemObj = {}
        itemObj.key = questItem.id
        itemObj.value = questItem.answers
        answerSelected.push(itemObj);
      }
    }
    console.log(answerSelected);
  },
})

2.4. questionnaireJson.js

const data = {
  quest: [
    {
    id: 1,
    type: 1, //类型,1.单选,2.多选
    isMust: 'Y',
    question: "你有女朋友吗?",
    answers: [{
      index: 'A',
      content: '有'
    }, {
      index: 'B',
      content: '没有'
    }]
  },
   {
    id: 2,
    type: 1,
    isMust: 'N',
    question: "目前薪资在哪个范围?",
    answers: [{
      index: 'A',
      content: '3-6k'
    }, {
      index: 'B',
      content: '6-8k'
    }, {
      index: 'C',
      content: '8-10k'
    }, {
      index: 'D',
      content: '10k以上'
    }]
  }, 
  {
    id: 3,
    type: 2,
    isMust: 'Y',
    question: "你喜欢哪一种编程语言?",
    answers: [{
      index: 'A',
      content: 'Java'
    }, {
      index: 'B',
      content: 'C语言'
    }, {
      index: 'C',
      content: 'PHP'
    }, {
      index: 'D',
      content: 'Python'
    }, {
      index: 'E',
      content: 'JavaScript'
    }, {
      index: 'F',
      content: '其他'
    }]
  }, 
  {
    id: 4,
    type: 3,
    isMust: 'Y',
    question: "身份证号",
    answers: ''
  }, 
  {
    id: 5,
    type: 3,
    isMust: 'N',
    question: "联系等方式",
    answers: ''
  },
  {
    id: 6,
    type: 4,
    isMust: 'Y',
    question: "其他建议",
    answers: ''
  }
]
}
module.exports = {
  data: data,
}
  • 8
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 微信小程序Vant Weapp是一款基于Vant UI组件库开发小程序框架,可以快速搭建小型应用程序。调查问卷demo是Vant Weapp的一个示例项目,用于展示如何利用Vant Weapp的组件来实现一个简单的调查问卷功能。 这个demo包含了问题列表、单选题和多选题、文本输入框、提交按钮等常见的调查问卷元素。用户可以根据自己的需要来编辑问题和选项,并选择问题的类型。在填写完问卷后,用户可以点击提交按钮将问卷内容发送到后台服务器进行数据处理。 Vant Weapp的组件库中提供了丰富的UI组件,包括按钮、表单、弹窗、轮播图等等,这些组件都可以在调查问卷demo中找到相应的运用。开发者可以根据自己的需求来选择和定制这些UI组件,实现个性化的问卷设计。 Vant Weapp还提供了丰富的API和文档,方便开发者进行定制化开发开发者可以根据自己的业务需求,对问卷demo进行二次开发,添加更多的功能和交互,以满足用户的不同需求。同时,Vant Weapp也对小程序的性能做了优化,保证了用户的流畅体验。 总之,微信小程序Vant Weapp调查问卷demo是一个简单而实用的小程序示例项目,结合了Vant Weapp的UI组件和功能,可以快速搭建一个调查问卷系统,并满足个性化的需求。开发者可以通过定制化开发,进一步优化问卷的功能和用户体验。 ### 回答2: 微信小程序是一种在微信内部运行的应用程序,而Vant Weapp是一款基于微信小程序的 UI 组件库。调查问卷demo是Vant Weapp提供的一个示例应用,用于展示如何使用Vant Weapp构建一个调查问卷小程序调查问卷demo通过Vant Weapp提供的丰富组件和模板,实现了一个简单而功能强大的调查问卷应用。用户可以通过小程序直接访问该demo,进而参与问卷调查。 在这个demo中,用户可以看到问卷的标题、问题和选项,并可以根据自己的选择进行答题。同时,该demo还提供了一些基本的问卷统计功能,比如展示各个问题的答题人数和选择比例。 该调查问卷demo的实现主要分为以下几个步骤: 1. 导入Vant Weapp组件库,并进行相关配置。 2. 创建问卷页面,并使用Vant Weapp提供的组件来布局和展示问卷内容。 3. 根据问卷模板,在页面中动态渲染问卷的标题、问题和选项等数据。 4. 实现用户答题的交互逻辑,比如监听用户选择的事件,并记录用户的选择。 5. 根据用户的答题情况,进行相关的统计和展示,比如展示选择比例和回答人数等。 通过参考这个调查问卷demo,开发者可以学习到如何在微信小程序中使用Vant Weapp来构建界面,并实现一些基本的交互和数据处理功能。同时,开发者也可以根据自己的需求对该demo进行修改和扩展,以满足实际的调查问卷应用场景的需求。 ### 回答3: 微信小程序vant weapp调查问卷demo是一个基于微信小程序开发框架vant和weapp的调查问卷示例程序。这个demo主要实现了一个简单的调查问卷功能,可以帮助用户快速创建、发布和统计问卷。 首先,在小程序的首页上,用户可以浏览到已发布的问卷列表。用户可以点击进入问卷详情页面,查看问卷的具体内容和选项。 在问卷详情页面,用户可以选择相应的选项,并提交答卷。提交后,用户可以查看自己的答卷结果,并可以查看所有答卷的统计结果。统计结果以图表的形式展示,方便用户直观地了解问卷结果。 在创建问卷页面,用户可以编辑问卷的标题、问题和选项。用户可以自定义问卷的类型,包括单选、多选等。还可以设置问卷的截止日期,以及是否匿名发布。 在后台管理页面,管理员可以管理发布的问卷,包括编辑、删除问卷。管理员还可以查看问卷的答卷统计结果,以及导出答卷数据。 使用vant和weapp开发这个调查问卷demo的好处是,vant提供了丰富的组件和样式,可以帮助开发者快速构建小程序的UI界面。weapp是微信小程序开发框架,具有方便、高效的特点,使用起来非常方便。 总的来说,微信小程序vant weapp调查问卷demo是一个功能简单但实用的问卷调查程序,通过这个demo,用户可以方便地创建、发布和统计问卷,帮助用户快速了解用户的需求和意见。同时,vant和weapp的使用也为开发者提供了便捷的开发方式,帮助开发者快速构建小程序

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值