更新记录

1.0.0(2026-09-02) 下载此版本

  • 首个版本发布
  • 支持六种题型:单选 single、多选 multiple、填空 fill、评分 score、下拉选择 select、日期 date
  • 支持两种模式:单页 page(全部题目平铺)与分步 step(一次一题 + 进度条)
  • 必答校验、答案变化即时消错、一键重置、v-model 双向绑定
  • 兼容微信 / 支付宝 / 百度 / 抖音 / 快手 / QQ 小程序、H5、App(vue),纯组件零依赖

平台兼容性

uni-app(4.87)

Vue2 Vue2插件版本 Vue3 Vue3插件版本 Chrome Safari app-vue app-vue插件版本 app-nvue Android Android插件版本 iOS 鸿蒙
1.0.0 1.0.0 - - 1.0.0 - 1.0.0 - -
微信小程序 微信小程序插件版本 支付宝小程序 支付宝小程序插件版本 抖音小程序 抖音小程序插件版本 百度小程序 百度小程序插件版本 快手小程序 快手小程序插件版本 京东小程序 京东小程序插件版本 鸿蒙元服务 QQ小程序 QQ小程序插件版本 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
1.0.0 1.0.0 1.0.0 1.0.0 1.0.0 1.0.0 - 1.0.0 - - - -

其他

多语言 暗黑模式 宽屏模式
× ×

fg-questionnaire 问卷调查组件

组件名:fg-questionnaire(uni_modules easycom 自动引入,也可手动引入) 版本:1.0.0

配置驱动的问卷调查 / 问卷表单组件:传入题目配置即可渲染,v-model 双向绑定答案对象。支持单选、多选、填空、评分、下拉选择、日期六种题型,单页与分步两种模式,内置必答校验、进度条、一键重置。纯组件零依赖,兼容微信 / 支付宝 / 百度 / 抖音 / 快手 / QQ 小程序、H5、App(vue)

特性

  • 六种题型:单选 single、多选 multiple、填空 fill(单行 / 多行)、评分 score(星星)、下拉选择 select、日期 date
  • 两种模式page 单页平铺(适合短问卷)、step 分步(一次一题 + 进度条,适合长问卷)
  • 必答校验required 题目未作答时高亮标红并提示,提交时统一校验;已答即自动消除错误提示
  • v-model 双向绑定:答案对象 { [questionId]: value },可初始化回显、实时获取
  • 纯 view / text / input / textarea / picker 实现:自定义勾选样式,各端渲染一致,不依赖原生 radio / checkbox 的样式差异
  • 主题色可配:选中项、评分星、主按钮一键换色
  • 支持 disabled 整体禁用、答案回显(setAnswers / 初始 modelValue)、一键重置

快速使用

uni_modules 插件默认开启 easycom,页面中直接使用即可,无需注册:

<template>
    <view class="page">
        <fg-questionnaire
            v-model="answers"
            :questions="questions"
            @submit="onSubmit"
        />
    </view>
</template>

<script>
export default {
    data() {
        return {
            answers: {},
            questions: [
                {
                    id: 'gender',
                    type: 'single',
                    title: '您的性别是?',
                    required: true,
                    optionLayout: 'wrap',
                    options: ['男', '女']
                },
                {
                    id: 'like',
                    type: 'multiple',
                    title: '您喜欢哪些水果?(多选)',
                    required: true,
                    options: ['苹果', '香蕉', '橘子', '葡萄']
                },
                {
                    id: 'score',
                    type: 'score',
                    title: '请为本次服务打分',
                    required: true,
                    scoreMax: 5,
                    scoreTexts: ['非常不满意', '非常满意']
                },
                {
                    id: 'city',
                    type: 'select',
                    title: '您所在的城市?',
                    required: true,
                    options: ['北京', '上海', '广州', '深圳']
                },
                {
                    id: 'birthday',
                    type: 'date',
                    title: '您的生日?',
                    options: []
                },
                {
                    id: 'suggest',
                    type: 'fill',
                    title: '您有什么建议?',
                    rows: 3,
                    maxlength: 200,
                    placeholder: '选填,最多 200 字'
                }
            ]
        }
    },
    methods: {
        onSubmit(answers) {
            console.log('问卷答案:', answers)
            uni.showToast({ title: '提交成功', icon: 'success' })
        }
    }
}
</script>

手动引入

import FgQuestionnaire from '@/uni_modules/fg-questionnaire/components/fg-questionnaire/fg-questionnaire.vue'
export default {
    components: { FgQuestionnaire }
}

题目配置(questions 数组每一项)

字段 类型 必填 说明
id String 题目唯一标识,答案对象以此作为 key
type String 题型:single / multiple / fill / score / select / date
title String 题目文本
required Boolean 是否必答,默认 false
remark String 题目下方说明文字
errorText String 本题未答时的错误文案,缺省用组件级 requiredText
options Array 按题型 单选 / 多选 / 下拉的选项,字符串数组或 { label, value } 对象数组(字段名可用 labelKey / valueKey 映射)
optionLayout String 单选 / 多选选项排布:vertical 竖排(默认) / wrap 横排换行(适合"是 / 否")
placeholder String 填空 / 下拉 / 日期的占位文案
rows Number 填空为多行 textarea 时的行数(>1 生效,默认 1 即单行 input)
maxlength Number 填空输入上限,默认 -1(不限)
scoreMax Number 评分星数(1-10),默认取组件 scoreMax(5)
scoreTexts Array 评分两端文案,如 ['非常不满意', '非常满意']
start / end String 日期题可选范围 YYYY-MM-DD,缺省取组件 dateStart / dateEnd
labelKey / valueKey String 本题对象选项的字段映射,覆盖组件级默认

属性说明

属性名 类型 默认值 说明
modelValue Object {} 答案对象 { questionId: value },支持 v-model
questions Array [] 题目配置数组(见上表)
mode String 'page' page 单页平铺 / step 分步(一次一题 + 进度条)
activeColor String '#3d7ef7' 主题色:选中项、评分星、主按钮
disabled Boolean false 是否禁用整个问卷
showSubmit Boolean true 是否显示提交按钮(page 模式底部;step 模式最后一题)
submitText String '提交问卷' 提交按钮文案
showReset Boolean true 是否显示重置按钮(page 模式)
resetText String '重置' 重置按钮文案
nextText / prevText String '下一题' / '上一题' 分步模式切换按钮文案
stepShowNum Boolean true 分步模式是否显示"x / n"题号
stepShowPercent Boolean true 分步模式是否显示进度百分比
validateOnChange Boolean true 作答后是否即时消除该题错误标记
toastError Boolean true 校验失败是否 uni.showToast 提示
toastText String '请完成必答题后再提交' 校验失败 toast 文案
requiredText String '此题必答,请作答' 题目错误提示文案
emptyText String '暂无题目' 无题目时占位文案
scoreMax Number 5 评分题默认星数(题目级 scoreMax 优先)
fillPlaceholder String '请输入' 填空默认占位
selectPlaceholder String '请选择' 下拉默认占位
datePlaceholder String '请选择日期' 日期默认占位
dateStart / dateEnd String '1900-01-01' / '' 日期题默认可选范围
labelKey / valueKey String 'label' / 'value' 对象选项字段映射默认值

事件说明

事件名 参数 说明
update:modelValue answers 答案变化,支持 v-model
change (answers, question, value) 某题答案变化
submit answers 点击提交且全部必答题已作答
fail invalidQuestions 校验失败,参数为未作答的必答题数组
reset - 点击重置(答案已清空)
step-change (index, question) 分步模式切换题目(下一步 / 上一步)

方法说明(ref 调用)

方法名 返回值 说明
getAnswers() Object 获取答案深拷贝
setAnswers(obj) - 批量设置答案(合并,不回清其他题目)
validate() { valid, invalid } 手动校验所有必答题
reset() - 清空全部答案、回到第一题

分步模式示例

<fg-questionnaire
    v-model="answers"
    mode="step"
    :questions="questions"
    @submit="onSubmit"
/>

分步模式下:顶部显示进度条与题号,每题答完点"下一题"(必答题未作答会拦截),上一题可回改,最后一题按钮变为"提交问卷",提交时统一校验全部必答题。

答案数据结构

{
    gender: '男',              // single:选项 value
    like: ['苹果', '香蕉'],     // multiple:选项 value 数组
    score: 5,                  // score:数字
    city: '北京',              // select:选项 value
    birthday: '2000-01-01',    // date:YYYY-MM-DD
    suggest: '希望增加夜间模式'  // fill:字符串
}

注意事项

  • 组件内部使用 view / text / input / textarea / picker 等 uni-app 通用组件实现,不使用原生 radio / checkbox,保证各端渲染样式一致;请勿在 nvue 页面中使用
  • picker 在 App / 小程序端为系统级选择器,H5 端为浏览器原生控件,交互体验以各端为准
  • 校验与 uni.showToast 的提示文案均可通过 requiredText / toastText / toastError 定制;需要更精细的定位提示时,可监听 fail 事件自行处理
  • 单选 / 多选 / 下拉选项为字符串数组时,答案即选项文本;为对象数组时取 valueKey 字段值,缺省 value 时取 labelKey 字段文本
  • modelValuequestions 均为响应式:外部修改 modelValue 会回显;新增题目会自动补默认答案,已有答案保留

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

许可协议

MIT协议

暂无用户评论。