自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

推薦!表單&試卷零代碼搭建平臺(tái)技術(shù)詳解

開(kāi)發(fā) 前端
通過(guò)這種方式, 我們只需要根據(jù)業(yè)務(wù)需求實(shí)現(xiàn)自己的組件, 編寫(xiě)組件可配置的屬性json, 即可通過(guò)配置引擎來(lái)動(dòng)態(tài)生成組件的可編輯面板, 從而讓非技術(shù)人員輕松編輯組件.

對(duì)于可視化的搭建表單,試卷等場(chǎng)景,讓不懂技術(shù)的人也能拖拽式創(chuàng)建自己的表單和試卷。

圖片圖片

今天就來(lái)和大家分享一下橙子試卷的技術(shù)架構(gòu)和技術(shù)實(shí)現(xiàn), 如果你也在調(diào)研零代碼, 低代碼, 或者表單引擎等技術(shù), 那么這篇文章也許可以給你帶來(lái)一些靈感。

圖片圖片

體驗(yàn)地址: https://turntip.cn/form-engine

文末會(huì)附技術(shù)交流群, 感興趣的朋友可以加入交流討論。

技術(shù)棧

之前在開(kāi)發(fā) H5-dooring 零代碼搭建平臺(tái)時(shí)我采用的是React技術(shù)棧, 因?yàn)橛?nbsp;react 寫(xiě)復(fù)雜邏輯會(huì)更順手, 好在 vue3 也支持了函數(shù)式的寫(xiě)法, 也提供了 hooks 機(jī)制,  讓我們寫(xiě)邏輯驅(qū)動(dòng)的應(yīng)用更加方便, 所以橙子試卷采用了國(guó)內(nèi)最流行的 vue3 作為前端框架。具體技術(shù)棧如下:

  • Vue3 前端框架
  • Vite 工程化工具
  • Typescript 類(lèi)型加強(qiáng)
  • arco-design 精美的前端UI庫(kù)
  • pinia 狀態(tài)管理庫(kù)
  • axios 請(qǐng)求庫(kù)
  • json schema 數(shù)據(jù)存儲(chǔ)規(guī)范
  • xijs 面向業(yè)務(wù)場(chǎng)景的js工具庫(kù)
  • vue-echarts 數(shù)據(jù)分析圖表庫(kù)
  • koa2 服務(wù)端數(shù)據(jù)支持
  • koa-jwt 基于koa封裝的jwt鑒權(quán)庫(kù)

當(dāng)然還有一些第三方組件這里就不一一介紹了。我們的核心在于從零完整設(shè)計(jì)一套 MVP 的零代碼搭建引擎, 所以后端部分, 大家可以替換成自己熟悉的 Java, Go, Python 等語(yǔ)言。

技術(shù)架構(gòu)

圖片圖片

因?yàn)榱愦a表單引擎設(shè)計(jì)的核心是如何構(gòu)造一套低成本且可擴(kuò)展的組件庫(kù), 并快速應(yīng)用到實(shí)際業(yè)務(wù)場(chǎng)景, 所以設(shè)計(jì)的核心就包括如下部分:

  • 可擴(kuò)展的組件庫(kù)系統(tǒng)
  • 靈活的拖拽搭建模式
  • 統(tǒng)一標(biāo)準(zhǔn)的DSL數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)規(guī)范
  • 一套可插拔的分析管理系統(tǒng)

接下來(lái)我會(huì)詳細(xì)介紹這幾塊的技術(shù)實(shí)現(xiàn), 當(dāng)然實(shí)現(xiàn)思想和技術(shù)棧無(wú)關(guān), 我們?nèi)匀豢梢园阉鼞?yīng)用到不同的技術(shù)體系中。

具體功能實(shí)現(xiàn)

1. 構(gòu)造可擴(kuò)展的組件庫(kù)系統(tǒng)

圖片圖片

因?yàn)槲覀兊拇罱▓?chǎng)景是問(wèn)卷, 試卷, 微頁(yè)面, 所以組件庫(kù)會(huì)圍繞表單來(lái)擴(kuò)展, 比如常用的:

  • 文本, 圖片
  • 單選, 多選, 圖片選擇
  • 下拉框
  • 文本輸入框
  • 文件上傳
  • 電子簽名
  • 評(píng)分

等等, 這些組件當(dāng)然不能滿(mǎn)足所有客戶(hù)的業(yè)務(wù)場(chǎng)景, 所以我們要設(shè)計(jì)一種可擴(kuò)展組件庫(kù), 并且開(kāi)發(fā)成本較低的方案。

我們可以參考常見(jiàn)的低代碼平臺(tái)的設(shè)計(jì)思路:

圖片圖片

簡(jiǎn)言之就是把核心UI和邏輯作為組件的主文件, 同時(shí)暴露標(biāo)準(zhǔn)的可配置屬性和可配置邏輯。

之所以強(qiáng)調(diào)“標(biāo)準(zhǔn)”, 是為了讓不同組件能共用一套屬性配置引擎,  從而讓組件二開(kāi)的成本大大降低(專(zhuān)注于組件的開(kāi)發(fā), 而不是配置的兼容)。

圖片圖片

其次為了盡可能讓組件的配置更靈活, 我們需要提供一套標(biāo)準(zhǔn)的組件默認(rèn)屬性, 讓用戶(hù)可以根據(jù)默認(rèn)屬性來(lái)配置自己的個(gè)性化的樣式, 那么我們的組件就需要這么來(lái)設(shè)計(jì):

圖片圖片

這里以橙子試卷的文本組件給大家舉個(gè)例子。

文本組件的主文件:

<template>
  <div
    :class="{
      text: true,
      justify: editorStore.data[index].align == 'justify',
      [editorStore.data[index].animation]: true,
    }"
    :style="{
      paddingTop: editorStore.data[index].padding[0] + 'px',
      paddingRight: editorStore.data[index].padding[1] + 'px',
      paddingBottom: editorStore.data[index].padding[2] + 'px',
      paddingLeft: editorStore.data[index].padding[3] + 'px',
      color: editorStore.data[index].titleColor,
      fontSize: editorStore.data[index].titleSize + 'px',
      fontWeight: editorStore.data[index].titleWeight,
      textAlign: editorStore.data[index].align,
      animationDelay: editorStore.data[index].delay,
      animationIterationCount: editorStore.data[index].number,
      cursor: 'pointer',
    }"
    @click="jump(editorStore.data[index].link)"
  >
    {{ editorStore.data[index].titleText }}
  </div>
</template>

<script setup lang="ts">
import { useEditorStore } from "@/store";

const editorStore = useEditorStore();

const jump = (link: string) => {
  window.location.href = link;
};

defineProps(["index"]);
</script>

文本組件的可配置屬性:

export default class Text {
    component: TextPropType;
    constructor(id: string) {
        this.component = {
            component: 'text',
            type:'editor.text',
            id,
            check: true,
            titleText: 'https://turntip.cn/form-engine',
            titleColor: 'black',
            titleSize:16,
            titleWeight:'500',
            padding: [0, 0, 0, 0],
            margin: [10, 10, 10, 10],
            animation:'',
            direction: 'center',
            link:'https://turntip.cn/formManager',
            delay:2,
            attrbite: [
                {
                    name: 'editor.titleText',
                    field: 'titleText',
                    component: 'textarea'
                },
                {
                    name: 'editor.padding',
                    field: 'padding',
                    component: "padding",
                    props: {
                        min: 0,
                        type:'padding'
                    }
                },
                {
                    name: 'editor.margin',
                    field: 'margin',
                    component: "padding",
                    props: {
                        min: 0,
                        type:'margin'
                    }
                },
            ]
        }
    }

}

通過(guò)這種方式, 我們只需要根據(jù)業(yè)務(wù)需求實(shí)現(xiàn)自己的組件, 編寫(xiě)組件可配置的屬性json, 即可通過(guò)配置引擎來(lái)動(dòng)態(tài)生成組件的可編輯面板, 從而讓非技術(shù)人員輕松編輯組件:

通過(guò)以上的方式, 我們可以輕松開(kāi)發(fā)各種自定義的組件, 提供給用戶(hù)使用:

圖片圖片

2. 靈活的拖拽搭建模式

圖片圖片

對(duì)于表單場(chǎng)景, 我們不需要特別復(fù)雜的布局交互, 所以這里我才用拖拽排序來(lái)實(shí)現(xiàn)頁(yè)面的搭建, 同時(shí)支持組件快捷復(fù)制和刪除。

目前 vue3 的比較成熟的拖拽組件有:

  • vuedraggable
  • vue3-draggable-resizable

這里選擇vuedraggable 來(lái)實(shí)現(xiàn)拖拽排序, 并對(duì)其進(jìn)行上層封裝, 實(shí)現(xiàn)體驗(yàn)更好的組件搭建排序效果。

當(dāng)然還有很多優(yōu)秀的拖拽庫(kù), 如果大家對(duì)vue3-draggable-resizable 感興趣, 也可以試試, 它支持網(wǎng)格布局和自由布局, 可以實(shí)現(xiàn)更自由的布局搭建效果:

圖片圖片

3. 統(tǒng)一標(biāo)準(zhǔn)的DSL數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)規(guī)范

在組件庫(kù)設(shè)計(jì)中我們?yōu)榱私y(tǒng)一管理和維護(hù)組件和組件的屬性配置, 需要定義統(tǒng)一化的 DSL 結(jié)構(gòu), 這個(gè)結(jié)構(gòu)包含了組件的如下信息:

  • 組件元數(shù)據(jù)
  • 位置信息
  • 樣式信息
  • 事件 / 交互
  • 埋點(diǎn)定義(高級(jí)配置)

后4個(gè)都好理解, 這里介紹一下組件元數(shù)據(jù), 它的價(jià)值在于定義組件的基本信息:

  • 組件類(lèi)型
  • 組件名稱(chēng)
  • 圖標(biāo)
  • 初始化數(shù)據(jù)
  • 組件路徑 (高級(jí), 可選)
  • 狀態(tài) / 版本 (高級(jí), 可選)

通過(guò)對(duì) 元信息 的定義, 我們可以很方便的建立更系統(tǒng)的組件庫(kù), 比如支持組件分類(lèi), 組件版本切換, 組件加載(通過(guò)路徑元信息來(lái)加載遠(yuǎn)程組件)。

所以我們需要盡可能規(guī)范統(tǒng)一的定義組件的通用規(guī)則和自定義規(guī)范, 以便讓不同組件都遵行統(tǒng)一的規(guī)則來(lái)實(shí)現(xiàn)零代碼搭建引擎的設(shè)計(jì)。

這里還是以橙子試卷為例子, 來(lái)介紹一下我們統(tǒng)一的DSL:

圖片圖片

首先我們看看文本的元信息:

這是一個(gè)簡(jiǎn)單的元信息, 它可以幫我們快速識(shí)別組件, 并為畫(huà)布提供組件更具體的渲染信息, 不同組件都通過(guò)統(tǒng)一的配置來(lái)定義, 可以讓我們的渲染器更加高效的渲染組件, 并降低組件維護(hù)成本。

在介紹組件的內(nèi)容中我已經(jīng)介紹了組件接受的 json 配置結(jié)構(gòu), 這里分享一個(gè)由多個(gè)組件組成的完整頁(yè)面的 DSL 結(jié)構(gòu)和實(shí)際代碼:

圖片圖片

案例代碼:

有了以上的統(tǒng)一 DSL 結(jié)構(gòu), 我們就可以輕松通過(guò) JSON 來(lái)渲染頁(yè)面, 同時(shí)也有更多的想象空間, 比如:

  • 通過(guò)DSL來(lái)實(shí)現(xiàn)跨端渲染搭建
  • 通過(guò)DSL來(lái)實(shí)現(xiàn)多人協(xié)作共享
  • 通過(guò)DSL來(lái)實(shí)現(xiàn)A出碼能力
  • 通過(guò)AI學(xué)習(xí)DSL來(lái)批量自動(dòng)化生產(chǎn)頁(yè)面

4. 可插拔的分析管理系統(tǒng)

一個(gè)可視化零代碼解決方案一定包含完整的用戶(hù)使用鏈路, 即從搭建到投放再到信息收集的完整分析鏈路。

圖片圖片

當(dāng)然不同的公司業(yè)務(wù)分析需求不同, 所以需要支持純粹的數(shù)據(jù)收集和流轉(zhuǎn), 以便供不同業(yè)務(wù)使用。

目前橙子試卷提供了一套完整的數(shù)據(jù)收集能力, 對(duì)于試卷場(chǎng)景, 也提供了自動(dòng)打分機(jī)制, 可以一鍵分析數(shù)據(jù)情況:

圖片圖片

當(dāng)然這都是可以基于自身規(guī)則自己二次開(kāi)發(fā)的, 橙子試卷只是提供了一套案例參考。

應(yīng)用場(chǎng)景和價(jià)值

  • 幫助中小企業(yè)或者個(gè)體提供一套低成本零代碼表單搭建解決方案,且不止于表單/試卷
  • 基于橙子試卷的最佳實(shí)踐, 輕松擴(kuò)展出更多的搭建業(yè)務(wù)場(chǎng)景
  • 開(kāi)箱即用的組件和模版管理最佳實(shí)踐, 積累和沉淀內(nèi)部技術(shù)資產(chǎn)
  • 結(jié)合AIGC, 創(chuàng)造更強(qiáng)大的生產(chǎn)力工具

體驗(yàn)地址: https://turntip.cn/form-engine

責(zé)任編輯:武曉燕 來(lái)源: 趣談前端
相關(guān)推薦

2022-06-30 07:48:06

Dooring低代碼零代碼

2020-06-18 14:20:52

零代碼開(kāi)發(fā)明道云

2024-04-17 08:50:59

開(kāi)源FormikReact 表單庫(kù)

2021-11-04 08:06:47

代碼編排平臺(tái)

2020-06-05 14:43:25

零代碼平臺(tái)企業(yè)軟件代碼

2020-06-05 14:48:11

零代碼低代碼開(kāi)發(fā)

2025-03-13 11:09:47

2021-10-18 07:51:38

零代碼平臺(tái)思路

2020-06-05 10:30:01

零代碼平臺(tái)軟件數(shù)據(jù)庫(kù)

2023-03-16 20:46:40

可視化平臺(tái)迭代

2021-12-30 11:30:13

人工智能機(jī)器學(xué)習(xí)技術(shù)

2009-03-04 09:52:35

代碼契約組件接口

2021-11-29 17:29:14

帆軟智數(shù)大會(huì)

2024-08-20 07:47:12

AI零代碼網(wǎng)關(guān)

2020-11-04 13:12:39

低代碼零代碼開(kāi)發(fā)

2022-04-08 10:31:28

美團(tuán)代碼建設(shè)

2024-04-07 08:31:56

文檔編輯引擎零代碼編輯器

2012-07-05 10:18:03

HTML5
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)