仿造问卷星--开发一套调查问卷设计工具(3/3)--完整流程

简介: 仿造问卷星--开发一套调查问卷设计工具(3/3)--完整流程

1,定义一个结果的对象:

let resultObj = {
  id: 0,
  name: "",
  questions: [],
};

id,name和questions分别对应问卷id,问卷名称和问卷题目。

2,结果赋值

用户点击生成问卷按钮时, 分别从id和name文本框中获取值 --赋值给resultObj

resultObj.id = +document.getElementById("qid").value.trim();
    resultObj.name = document.getElementById("qname").value.trim();

将上节课拿到的question赋值给刚刚定义的对象:

resultObj.questions = questions;
  resultJson = JSON.stringify(resultObj);
  console.log(resultObj);
  

打印输出结果:

json结果:

{
    "id": 1,
    "name": "测试问卷",
    "questions": [
        {
            "id": 1,
            "title": "题目1",
            "question_type": "radio",
            "question_type_text": "单选题",
            "options": [
                {
                    "option_id": "A",
                    "option_value": "选项1"
                },
                {
                    "option_id": "B",
                    "option_value": "选项2"
                },
                {
                    "option_id": "C",
                    "option_value": "选项3"
                }
            ]
        },
        {
            "id": 2,
            "title": "题目2",
            "question_type": "checkbox",
            "question_type_text": "多选题",
            "options": [
                {
                    "option_id": "A",
                    "option_value": "选项4"
                },
                {
                    "option_id": "B",
                    "option_value": "选项5"
                },
                {
                    "option_id": "C",
                    "option_value": "选项6"
                }
            ]
        },
        {
            "id": 3,
            "title": "单行文本题",
            "question_type": "input",
            "question_type_text": "填空题"
        }
    ]
}

3,pretty-print-json的使用

引入pretty-print-json,将上述json输出结果,格式化并打印到json结果文本框中:

import { prettyPrintJson } from "pretty-print-json";
document.getElementById("json-preview").innerHTML =
    prettyPrintJson.toHtml(resultObj);

结果如下图:

4,copy-to-clipboard的使用

拷贝功能:

点击copy json按钮时,将jison数据拷贝到剪切板,因为拷贝的是一个字符串,而不是对象,这里需要通过将对象转换为字符串,然后进行copy操作:

首先定义一个字符串:

let resultJson = "";

将对象转换为字符串,并赋值给resultJson

resultJson = JSON.stringify(resultObj);

引入copy-to-clipboard依赖:

import copy from "copy-to-clipboard";

将resultJson拷贝到剪切板:

document.getElementById("copy").onclick = () => {
  copy(resultJson);
  alert("已复制到剪贴板");
};

拷贝弹框:

5,gotpl的使用

html游览功能

这是使用到gotpl依赖,它的作用是把一段模板用给定的数据对象渲染出来。

模板已经提前写好了,直接copy拿走:

//模板
const tpl = `
<div class="question">
  <div class="row">
    问卷ID:<%= id %>
  </div>
  <div class="row">
    问卷名称:<%= name %>
  </div>
  <% for(var i=0, l=questions.length; i<l; ++i){ %>
    <% var item = questions[i]; %>
    <div class="question-wrap">
      <div class="question-title"><%= item.id %>. <%= item.title %>【<%=item.question_type_text %>】</div>
      <% if(item.question_type === 'input'){ %>
        <div class="input">
          <input type="text" name="<%= item.id %>" />
        </div>
      <% }else if(item.question_type === 'radio'){ %>
        <div class="radio">
          <% for(var j=0, k=item.options.length; j<k; ++j){ %>
            <label class="label">
              <input type="radio" name="<%= item.id %>" value="<%= item.options[j].option_id %>" />
              <%= item.options[j].option_id %>.
              <%= item.options[j].option_value %>
            </label>
          <% } %>
        </div>
      <% }else if(item.question_type === 'checkbox'){ %>
        <div class="checkbox">
          <% for(var j=0, k=item.options.length; j<k; ++j){ %>
            <label class="label">
              <input type="checkbox" name="<%= item.id %>" value="<%= item.options[j].option_id %>" />
              <%= item.options[j].option_id %>.
              <%= item.options[j].option_value %>
            </label>
          <% } %>
        </div>
      <% } %>
    </div>
  <% } %>
</div>
`;

引入gotpl依赖:

import gotpl from "gotpl";

利用gotpl进行渲染模板—里面参数是前面是模板,后面是数据对象

document.getElementById("html-preview").innerHTML = gotpl.render(
        tpl,
        resultObj
    );

6,最终结果展示

生成问卷游览结果如下图(红框内容)

通过这个问卷编辑工具,我们手工编辑多套题,不用一道一道录入,就可批量完成问卷调查的设计工作。

目录
相关文章
|
2月前
项目经理进行竞品分析时可以参考的几个网站
项目经理进行竞品分析时可以参考的几个网站
|
29天前
|
搜索推荐 数据管理 数据挖掘
提升调研效率!2024年哪个问卷工具更值得选择?
Zoho Survey是一款适用于多行业的问卷工具,提供丰富的调查功能,包括多样问题类型、定制化设计、高级逻辑、自动化、多渠道分发、日期提醒、自定义链接、多语言支持和数据管理集成。其独特优势在于与Zoho应用的无缝集成、高级问题类型、协作功能、强大的数据分析和实时响应跟踪等,适合高效、个性化的调查需求。
21 0
|
2月前
|
JSON JavaScript 前端开发
仿造问卷星--开发一套调查问卷设计工具(1/3)--完整流程
仿造问卷星--开发一套调查问卷设计工具(1/3)--完整流程
23 0
|
4月前
|
小程序 JavaScript Java
基于微信小程序的竞赛管理平台设计与实现(开题报告+任务书+源码+lw+ppt +部署文档+讲解)
基于微信小程序的竞赛管理平台设计与实现(开题报告+任务书+源码+lw+ppt +部署文档+讲解)
96 1
|
5月前
|
小程序 前端开发 JavaScript
开题报告--基于微信小程序的村务管理系统的设计与开发
开题报告--基于微信小程序的村务管理系统的设计与开发
|
6月前
|
小程序 前端开发 Java
【开题报告】基于uniapp的在线考试小程序的设计与实现
【开题报告】基于uniapp的在线考试小程序的设计与实现
|
6月前
|
小程序 前端开发 Java
【开题报告】基于微信小程序的签到打卡系统的设计与实现
【开题报告】基于微信小程序的签到打卡系统的设计与实现
169 0
|
7月前
|
安全 区块链 数据安全/隐私保护
dapp互助预约排单二二复制/三三复制大小公排项目系统开发稳定版/玩法详情/指南教程/规则方案/需求设计/案例源码
能合约在代码中加入了许多安全校验机制,比如对输入参数范围的检查、防止重入攻击的修复等。并且智能合约在运行过程中记录每一笔交易以及合约状态的变化,确保所有的交易和状态都是经过验证和授权的,不会受到篡改。
|
10月前
|
前端开发 NoSQL Redis
案例05-前后端分离的好处(发送调查问卷)
前后端分离的好处(发送调查问卷)
|
10月前
|
前端开发
项目实战5——发送调查问卷流程代码流程优化
项目实战5——发送调查问卷流程代码流程优化
70 0