工程化实践:工程配置化设计

news2024/11/15 13:44:38

文内项目 Github:XIAOJUSURVEY

配置化是很灵活且很常见的使用,那XIAOJUSURVEY里有哪些地方应用到了呢?

基础模板​

问卷模板​

在创建问卷时,我们提供了多种问卷类型选择,例如普通问卷、投票、报名、NPS等。

new

为了实现这些问卷类型的配置,我们使用了一份默认的模板文件(templateBase.json),以及每种问卷类型专属的JSON文件。这两份JSON文件会进行合并,生成初始的问卷配置数据,最终存储在数据库中供初始化使用。以下是相关文件的路径:

默认问卷模板​
server/src/apps/surveyManage/template/surveyTemplate/templateBase.json
普通问卷模板​
server/src/apps/surveyManage/template/surveyTemplate/survey/normal.json
报名问卷模板​
server/src/apps/surveyManage/template/surveyTemplate/survey/register.json
投票问卷模板​
server/src/apps/surveyManage/template/surveyTemplate/survey/vote.json

模板文件的合并操作允许我们创建不同类型的问卷,并根据用户选择的类型初始化问卷配置。这种灵活性使得问卷创建和管理变得更加方便和可扩展。

题型模板​

add

在需要添加一个新题目时,我们需要访问相关题型的meta.js文件以获取题型默认字段。基于配置文件,我们可以根据题型生成新的题目。

字段说明参考:《问卷业务协议规范-题型字段》

题型菜单​

题型菜单功能如下

menu

在系统中,要显示如上图所示的题型列表,我们通过两个配置文件灵活管理和展示不同题型,以及根据需要定制它们的外观和行为。

单题型配置​

assets.js 主要用于定义所有的题型以及每个题型的基本信息:

// web/src/materials/questions/src/assets/config/assets.js
{
    "text": {
        "type": "text",
        "snapshot": "/imgs/question-type-snapshot/iL84te6xxU1657702189333.png",
        "path": "InputModule",
        "icon": "tixing-danhangshuru",
        "title": "单行输入框"
    }
}

字段说明:

   text: 表示题型的类型(type),与字段type的值一致。

   snapshot: 题型的预览图,用于展示题型的外观。

   path: 题型的组件路径,指定了题型的实际实现。

   icon: 题型的图标,用于标识题型。

   title: 题型的中文介绍,提供对题型的简短描述。

题型菜单配置​

具体要展示哪些题型以及它们在列表中的显示顺序,我们定义在 questionTypeListConfig.js 文件中:

// web/src/management/config/questionTypeListConfig.js
[
  "text",
  "textarea",
  "radio",
  "checkbox",
  "binary-choice",
  "radio-star",
  "vote"
]

在目前的系统中,我们仅展示一个题型列表,因此我们使用一个数组来表示所要展示的题型,并按照数组的顺序来显示它们。

属性设置器​

一份问卷内容主要由以下几部分组成:

属性面板可以通过不同设置器进行各部分相应属性的管理,查看 预置设置器列表。

头图设置器配置​

// web/src/management/config/setterConfig/bannerConfig.js

[
  {
    label: '头图配置(默认尺寸:750*260)',
    type: 'Customed',
    key: 'bannerConfig',
    content: [
      {
        label: '顶部图片地址',
        type: 'Input',
        key: 'bannerConfig.bgImage',
        direction: 'horizon',
      },
      {
        label: '顶部视频地址',
        type: 'Input',
        key: 'bannerConfig.videoLink',
        direction: 'horizon',
      },
      {
        label: '视频海报地址',
        type: 'Input',
        key: 'bannerConfig.posterImg',
        direction: 'horizon',
      },
    ],
  },
  {
    label: '头图跳转',
    type: 'Customed',
    key: 'bannerConfig-Jump',
    content: [
      {
        label: '点击图片跳转到新链',
        type: 'StarSwitch',
        direction: 'space_between',
        key: 'bannerConfig.bgImageAllowJump',
      },
      {
        label: '跳转链接',
        type: 'Input',
        direction: 'horizon',
        key: 'bannerConfig.bgImageJumpLink',
        relyFunc: data => {
          return !!data?.bannerConfig?.bgImageAllowJump
        },
      },
    ],
  }
]
头图配置​

默认尺寸:750*260

  • 顶部图片地址: 输入框,用于指定顶部图片的地址。

  • 顶部视频地址: 输入框,用于指定顶部视频的地址。

  • 视频海报地址: 输入框,用于指定视频的海报地址。

头图跳转​
  • 点击图片跳转到新链接: 开关,用于启用或禁用点击图片后的跳转。

  • 跳转链接: 输入框,用于指定点击图片后跳转的链接。此选项在启用跳转时可用。

题型属性配置​

参考:《题型物料属性配置》

Logo设置器配置​

自定义Logo​
  • 自定义Logo: 输入框,用于指定自定义Logo的地址。

  • Logo大小: 输入框,填写宽度百分比,例如30%。

// web/src/management/config/setterConfig/logoConfig.js

[
    {
        label: '自定义Logo',
        type: 'Input',
        key: 'logoImage',
        tip: '默认尺寸200px*50px'
    },
    {
        label: 'Logo大小',
        type: 'InputPercent',
        key: 'logoImageWidth',
        tip: '填写宽度百分比,例如30%'
    }
]

提交按钮设置器配置​

提交按钮文案​
  • 提交按钮文案: 输入框,用于自定义提交按钮的文本内容。

提交确认弹窗​
  • 是否配置该项: 开关,用于启用或禁用提交确认弹窗。

  • 二次确认文案:

    输入框,用于自定义提交确认弹窗中的文本内容。此选项在启用提交确认弹窗时可用。

提交文案配置​
  • 已提交: 输入框,用于自定义已提交状态下的文本提示。

  • 提交结束: 输入框,用于自定义提交已满额时的文本提示。

  • 其他提交失败: 输入框,用于自定义其他提交失败时的文本提示。

// web/src/management/config/setterConfig/submitConfig.js

[
    {
        label: '提交按钮文案',
        type: 'Input',
        key: 'submitTitle',
        placeholder: '提交',
        value: ''
    },
    {
        label: '提交确认弹窗',
        type: 'Customed',
        key: 'confirmAgain',
        content: [
            {
                label: '是否配置该项',
                type: 'StarSwitch',
                key: 'confirmAgain.is_again',
                direction: 'horizon',
                value: true,
            },
            {
                label: '二次确认文案',
                type: 'Input',
                key: 'confirmAgain.again_text',
                direction: 'horizon',
                placeholder: '确认要提交吗?',
                value: '确认要提交吗?',
            }
        ]
    },
    {
        label: '提交文案配置',
        type: 'Customed',
        key: 'msgContent',
        content: [
            {
                label: '已提交',
                type: 'Input',
                key: 'msgContent.msg_9002',
                placeholder: '请勿多次提交!',
                value: '请勿多次提交!',
                direction: 'horizon',
            },
            {
                label: '提交结束',
                type: 'Input',
                key: 'msgContent.msg_9003',
                placeholder: '您来晚了,已经满额!',
                value: '您来晚了,已经满额!',
                direction: 'horizon',
            },
            {
                label: '其他提交失败',
                type: 'Input',
                key: 'msgContent.msg_9004',
                placeholder: '提交失败!',
                value: '提交失败!',
                direction: 'horizon',
            },
        ]
    }
]

关于我们

感谢看到最后,我们是一个多元、包容的社区,我们已有非常多的小伙伴在共建,欢迎你的加入。

Github:XIAOJUSURVEY

社区交流群

微信:

Star

开源不易,请star 一下 ❤️❤️❤️,你的支持是我们最大的动力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1982692.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

安卓碎片Fragment

文章目录 Fragment的简单用法动态添加Fragment在Fragment中实现返回栈碎片与活动之间的通信 Fragment是一种可以嵌入在Activity当中的UI片段,它能让程序更加合理和充分地利用大屏幕的空间。 Fragment的简单用法 先建一个空的项目,然后创建两个fragment文…

单片机振荡电路晶振不起振原因分析与解决方法

晶发电子专注17年晶振生产,晶振产品包括石英晶体谐振器、振荡器、贴片晶振、32.768Khz时钟晶振、有源晶振、无源晶振等,产品性能稳定,品质过硬,价格好,交期快.国产晶振品牌您值得信赖的晶振供应商。 晶振在单片机系统中扮演着至关重要的角色,它为单片机提…

大模型分不清 9.9 与 9.11 谁大,那 Embedding 模型呢?

这是我今天在维也纳举行的 ICML 会议上被问到的问题。 在茶歇期间,一位 Jina 用户向我提出了一个源自 LLM 社区最近讨论的问题。他问我们 Jina Embeddings 能不能判断 9.11 比 9.9 更小,很多大模型在这个小问题上翻了车。 我说:“老实说&am…

Flink 实时数仓(七)【DWS 层搭建(一)流量域汇总表创建】

前言 今天开始 DWS 层的搭建,不知不觉又是周一,都忘了昨天是周末,近两年对我来说,周六日晚上八九点能打一小会篮球就算一周的休息了。不得不说自己真的是天生打工体质,每天不管多累,晚上十二点睡&#xff0…

SpringBoot自动配置和执行过程

Spring的执行流程 1. 加载容器(加载配置文件) 2. 根据配置完成Bean的初始化(扫描配置范围内的五大类注解) 3. 将被五大类注解修饰的类注册到Spring容器中 (将对象交给Spring IoC容器管理) 4.注入Bean对象(Autowired、R…

Linux - - - Linux 添加环境变量

1.添加环境变量 编辑环境变量配置文件。 vim /etc/profile在最后面新增一行,导出 PATH 变量并在之前的 PATH 变量后面添加冒号,然后添加上你的可执行文件的目录。 export PATH$PATH:/usr/local/aspnetcore/aspnetcore-runtime-8.0.7-linux-x64/2.加载…

GD32 SPI 通信协议

1.0 SPI 简介 SPI是一种串行通信接口,相对于IIC而言SPI需要的信号线的个数多一点,时钟的信号是主机产生的。 MOSI:主机发送,从机接收 MISO:主机接收,从机发送 CS:表示的是片选信号 都是单向…

在线Banner设计工具大比拼:谁更胜一筹

在数字营销的时代,一个吸引眼球的 Banner 广告是吸引潜在客户、提高品牌知名度的关键。为了帮助营销人员和设计师快速创建专业的 Banner 广告,市面上出现了多种易于使用的 Banner 设计工具。本文将介绍几个受欢迎的 Banner 设计工具,包括即时…

路径规划——A*算法

路径规划——A*算法 算法原理 为了解决Dijkstra算法效率低的问题,A Star 算法作为一种启发式算法被提出。该算法在广度优先的基础上加入了一个估价函数。如BFS和常规方法如Dijsktra算法结合在一起的算法,有点不同的是,类似BFS的启发式经常给…

RGB红绿灯——Arduino

光的三原色 牛顿发现光的色散奥秘之后,进一步计算发现:七种色光中只有红、绿、蓝三种色光无法被分解,而其他四种颜色的光均可由这三种色光以不同比例相合而成。于是红、绿、蓝被称为“三原色光”或“光的三原色”。后经证实:红、绿…

提升C++开发效率的利器:深入解析Clang Power Tools

目录 一、引言 二、Clang Power Tools 简介 什么是 Clang Power Tools? 背景与发展历史 与 Clang 编译器的关系 主要开发团队和社区支持 系统要求 安装步骤 基本配置和使用 三、主要功能 代码格式化(Clang-Format) 代码质量提升 …

springboot+Loki+Loki4j+Grafana搭建轻量级日志系统

文章目录 前言一、日志组件介绍1.1 Loki组件1.2 Loki4j组件1.3 Grafana 二、组件下载安装运行Loki下载安装运行Grafana下载安装运行 三、创建springboot项目总结 前言 日志在任何一个web应用中都是不可忽视的存在,它已经成为大部分系统的标准组成部分。搭建日志可视…

【大模型】Unsloth安装及使用教程

Unsloth是一个开源的大模型训练加速项目,使用OpenAI的Triton对模型的计算过程进行重写,大幅提升模型的训练速度,降低训练中的显存占用。Unsloth能够保证重写后的模型计算的一致性,实现中不存在近似计算,模型训练的精度…

【Material-UI】Button 组件中的基本按钮详解

文章目录 一、基本按钮变体1. 文本按钮(Text Button)2. 实心按钮(Contained Button)3. 轮廓按钮(Outlined Button) 二、应用场景与注意事项1. 使用场景2. 注意事项 三、总结 Material-UI 的 Button 组件是前…

ShardingProxy使用自定义策略,数据迁移方案

文章目录 ShardingProxy功能扩展分库分表数据迁移方案 ShardingProxy功能扩展 我们在使用ShardingJDBC时,会进行自定义分布式主键生成策略、自定义分片策略 如果我们想要我们自定义的这些策略在ShardingProxy中也能使用,应该如何操作嘞? 我…

使用F1C200S从零制作掌机之I2C传感器

访问I2C设备(比如eeprom),我知道的有三总方法: (一)i2c-dev操作I2C设备:不用添加设备驱动,用户直接在应用层完成对具体I2C 设备的驱动工作。 (二)sysfs操作…

微信小程序教程011-:2:京西购物商城实战之TabBar实现

2、tabBar 2.0 创建tabBar分支 运行如下命令,基于master分支,创建本地tabBar子分支,用来开发和tabBar相关的功能 git checkout -b tabbar2.1 创建tabBar页面 在pages目录中,创建首页(home)、分类(cate)、购物车(cart)、我的(my)这4个tabBar页面,在HBuilderX中…

【网络世界】数据链路层

目录 🌈前言🌈 📁 初识数据链路层 📂 概念 📂 协议格式 📁 MAC地址 📂 概念 📂 与IP地址的区别 📁 MTU 📂 对IP协议的影响 📂 对UDP协议的影响…

思维+位运算,CF 1934D1 - XOR Break --- Solo Version

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 1934D1 - XOR Break --- Solo Version 二、解题报告 1、思路分析 合法操作会让 n 越变越小 假如最高位1为 b1, 次高位1 为b2 那么我们去掉b1 的 1最大能够得到的数为 &#xff08;1 << b2&#xff…

图像传感器 - 从零开始认识各种传感器【二十六期】

图像传感器|从零开始认识各种传感器 1、什么是图像传感器&#xff1f; 图像传感器是将光信号转换为电信号的设备&#xff0c;图像传感器通过捕捉光子并将其转化为电子信号&#xff0c;从而生成数字图像。它是数码相机、摄像机、智能手机、无人机、自动驾驶汽车以及各种工业和医…