首页 > 其他分享 >uniapp实现问卷多项填空

uniapp实现问卷多项填空

时间:2024-07-12 13:32:42浏览次数:15  
标签:uniapp arr 下划线 val indLength strLength indStart 填空 问卷

产品提出了一个需求,需要实现类似问卷星的记录单,要求有单选,多选,填空,以及多项填空。前三者好实现,最后一个花费了我挺长的时间。
在pc端后台管理模板选项设置的时候,保存是将整个问题保存进去,以三个或三个以上的下划线为一个空,保存的形式例为:  cm*  cm*___  cm,每个空又有自己的限制

小程序用户使用的时候,我想让每个空在点击的时候变成输入框,失去焦点又变回一段话。
为此,我对保存的内容做了分隔处理,将空和文字分隔开来形成一个数组。添加类型判断,如果是空的话点击显示input框。order属性是为了回显答案时候方便替换
`// 定义一个函数 getNodes,用于解析传入的 val 对象中的 multipleQuestions 字符串
getNodes(val) {
let indStart = 0; // 初始化记录位置的索引
let indLength = 0; // 初始化记录连续下划线长度的计数器
let strLength = 0; // 初始化记录连续字符串长度的计数器
let arr = []; // 创建一个空数组,用于存放解析后的节点

// 遍历 multipleQuestions 字符串中的每一个字符
for (let i = 0; i < val.multipleQuestions.length; i++) {
    // 当前字符为下划线时执行以下逻辑
    if (val.multipleQuestions[i] === '_') {
        // 如果之前存在非下划线的字符串,将其添加到 arr 中
        if (strLength > 0) {
            arr.push({
                val: val.multipleQuestions.slice(indStart, (indStart + strLength)), // 截取字符串
                type: 'str', // 标记为字符串类型
            });
            strLength = 0; // 清空字符串长度计数器
        }
        // 如果 indLength 为0,说明未开始记录下划线,更新 indStart 的值
        if (indLength == 0) indStart = i;
        indLength++; // 增加下划线计数器
    } else {
        // 当前字符不是下划线时执行以下逻辑
        // 如果之前存在连续3个或更多下划线,创建一个输入类型的节点并添加到 arr 中
        if (indLength >= 3) {
            arr.push({
                val: '_'.repeat(indLength), // 生成连续的下划线
                type: 'input', // 标记为输入类型
                show: false, // 默认隐藏输入框
            });
            // 如果之前没有记录字符串,更新 indStart 的值
            if (strLength == 0) indStart = i;
            strLength++; // 增加字符串长度计数器
        } else if (indLength < 3 && indLength > 0) { // 处理不足3个下划线的情况
            strLength += indLength; // 下划线不足三个,当做文字处理,继续往下执行
        } else {
            // 如果之前没有记录字符串,更新 indStart 的值
            if (strLength == 0) indStart = i;
            strLength++; // 增加字符串长度计数器
        }
        indLength = 0; // 清空下划线计数器
    }

    // 检查是否到达字符串的末尾
    if (i + 1 == val.multipleQuestions.length) {
        // 如果存在非下划线的字符串,创建一个字符串类型的节点并添加到 arr 中
        if (strLength > 0) {
            arr.push({
                val: val.multipleQuestions.slice(indStart, (indStart + strLength)),
                type: 'str'
            });
        }
        // 如果存在连续的下划线,创建一个输入类型的节点并添加到 arr 中
        else if (indLength > 0) {
            arr.push({
                val: '_'.repeat(indLength),
                type: 'input',
                show: false,
            });
        }
    }
}

// 为 arr 中的输入类型节点设置 order 属性
let temp = 0;
arr.forEach(item => {
    if (item.type == 'input') {
        this.$set(item, 'order', temp); // 使用 Vue 的响应式系统设置 order 属性
        temp++; // 自增 order 的值
    }
});

return arr; // 返回解析后的节点数组

}`

标签:uniapp,arr,下划线,val,indLength,strLength,indStart,填空,问卷
From: https://www.cnblogs.com/mulu777/p/18298187

相关文章

  • uniapp 使用uview 组件 DatetimePicker 默认值无效问题
    1.DatetimePicker默认值无效问题 -- 解决办法:使用$refs解决<u-datetime-pickerref="defaultPicker":show="openDatePicker":value="dateValue"mode="date" minDate="-2209017943"closeOnClickOverl......
  • Uniapp 使用 Leaflet
    在Uniapp中使用Leaflet,可以按照以下步骤进行:安装Leaflet:如果您使用的是H5平台,可以通过以下命令在项目根目录安装Leaflet:npminstallleaflet对于其他平台(如小程序),可能无法直接通过npm安装,需要手动引入Leaflet的相关资源文件。在页面中引入Leaflet:在需......
  • uniapp微信小程序获取定位
    一、需求在uniapp编写的微信小程序中获取到用户的定位(简单版)二、方法及使用时遇到的问题1、从微信开放文档中了解到微信小程序中获取用户的定位可以使用wx.getLocation2、直接使用文档中的示例代码,并在文件目录的 pages.json 中进行 requiredPrivateInfos 配置,再运行代码......
  • uniapp-Java使用AES加密解密
    操作前uniapp需要安装  npminstallcrypto-js 在需要使用的界面加入 importCryptoJSfrom'crypto-js' java端<!--springsecurity安全认证--><dependency><groupId>org.springframework.boot</groupId>......
  • uniapp+vue3封装下拉框(支持单选、多选)
    子组件代码<template><viewclass="uni-select-dc"><viewref="select"class="uni-select-dc-select":class="{active:active}"@click.stop="handleSelect">......
  • uniapp 封装蓝牙-(给设备发指令,分包数据发送)
    注意事项:1、关键点:初始化蓝牙——》uni.openBluetoothAdapter获取本机蓝牙适配器状态——》uni.getBluetoothAdapterState开始搜索蓝牙设备——》uni.startBluetoothDevicesDiscovery监听蓝牙设备(或者蓝牙设备列表,找到需要的那个)——......
  • uniapp 二次封装ui组件加class样式或修改样式在微信小程序不生效的情况
    原因:首先不论是自定义组件还是ui组件,本质上的原因都是微信小程序默认的组件隔离策略导致的。微信小程序组件隔离文档参考组件样式隔离默认情况下,自定义组件的样式只受到自定义组件wxss的影响。除非以下两种情况:指定特殊的样式隔离选项 styleIsolation 。webvie......
  • 基于SpringBoot+Vue+uniapp的酒店客房管理系统的详细设计和实现(源码+lw+部署文档+讲
    文章目录前言详细视频演示具体实现截图技术栈后端框架SpringBoot前端框架Vue持久层框架MyBaitsPlus系统测试系统测试目的系统功能测试系统测试结论为什么选择我代码参考数据库参考源码获取前言......
  • 基于SpringBoot+Vue+uniapp的干洗店预约洗衣系统的详细设计和实现(源码+lw+部署文档+
    文章目录前言详细视频演示具体实现截图技术栈后端框架SpringBoot前端框架Vue持久层框架MyBaitsPlus系统测试系统测试目的系统功能测试系统测试结论为什么选择我代码参考数据库参考源码获取前言......
  • 基于SpringBoot+Vue+uniapp的汽车维修预约服务系统的详细设计和实现(源码+lw+部署文档
    文章目录前言详细视频演示具体实现截图技术栈后端框架SpringBoot前端框架Vue持久层框架MyBaitsPlus系统测试系统测试目的系统功能测试系统测试结论为什么选择我代码参考数据库参考源码获取前言......