低代碼表單配置平臺替代普通表單配置平臺,前端部分重構的設計和思路

前言

最近將公司的舊表單配置平臺重構為低代碼表單配置平臺,這里記錄一下這個過程的設計和思路,不涉及具體的代碼;另外這篇文章基本只涉及前端部分,也不涉及與后端數據交互部分。

需求

固化的表單配置平臺 -> 靈活的表單配置平臺

功能新平臺原平臺備注
動態化配置可根據不同業務配置不同的字段與表單項
關聯數據類與表關聯后端數據
拖拽配置×原平臺只支持通過點擊按鈕新增或修改表單
可視化配置×所見即所得
靈活布局×原平臺只支持簡單的分組與占寬,不支持復雜的布局與嵌套

低代碼表單結構示意圖

在這里插入圖片描述

思路

如上圖所示,要實現適合現代 Web 框架下的低代碼表單平臺,有如下大致思路

組件層面

需要有對應的原子物料組件(表單,布局…)

抽象層面

需要有組件對應的 schema(屬性抽象)

物料區,渲染區,設置區

在發生交互時會發生聯動(綠色箭頭),組件抽象后表現為各自 schema 的變動

根據當前的 schema 渲染對應的布局與組件

關鍵點

原子組件庫

需要有基礎的原子組件,包括表單組件和布局組件,大部分表單組件可復用舊平臺已開發的組件

schema

需要對組件和表單的 schema 進行定義和抽象,確保 schema 可以涵蓋組件和表單的渲染,拖拽生成及屬性設置等功能

物料區

對組件實現可拖拽功能的包裹,拖拽時需要復制對應物料組件到渲染區的對應位置

渲染區

  • 本質是表單組件;

  • 布局組件需支持嵌套;

  • 共有設計態和正常態兩種狀態;

  • 當處于設計態時:

    • 內部的布局組件可拖放;
    • 組件可選中
    • 選中組件驅動設置區的渲染

設置區

  • 根據選中組件渲染

  • 本質是表單

  • 表單項需與選中組件各屬性對應,驅動選中組件的屬性改變

實現細節

原子組件庫

組件接口需要規范化,例如,使用 v-model 綁定數據,style 傳入樣式,等

schema

  • 每個組件具有 id,name,compName,props 公共字段

  • 容器組件和表單組件額外具有 children 屬性,可以嵌套其他組件

  • 組件的 schema 結構,如下:

    interface CompSchema {// 組件id,具有唯一性id: string;// 顯示名稱name: string;// 組件名稱,PascalCase格式compName: string;// 組件屬性props: Record<string, any>;// 子組件children: CompSchema[];
    }
    
  • 組件的屬性設置表單 schema:用于在渲染區選中該組件時,在編輯區呈現出對應表單的 schema,結構同上,但嵌套的層級和屬性可能會比較復雜

拖拽庫

可使用第三方或自行設計,但需要滿足以下特性

  • 數據驅動,傳入數據列表,可渲染出可拖拽節點

  • 暴露出拖拽響應的事件和方法,便于做特定的處理

  • 支持不同組件間的拖拽通信,例如從物料面板到渲染面板的拖拽通信

物料區

  • 使用第三方或自研的拖拽庫,傳入組件的 schema 作為可拖拽節點,形成基本的可拖拽物料面板

  • 物料區往渲染區拖拽節點時,復制選中組件的 schema(特別是 id 需要重新生成,避免 id 不唯一)到渲染區

渲染區的狀態

渲染區分為設計態和正常態

  • 方案:

    • 方案 1:在組件 schema 傳入屬性作為標識

      • 優點:思路較為簡單
      • 缺點:設計態相關邏輯會侵入到組件內部,盡管正常態時不需要這個邏輯
    • 方案 2:設計態與正常態完全隔離,渲染面板由正常態圖層+設計態圖層組件,互相隔離

      • 優點:設計態相關邏輯與正常態完全解耦
      • 缺點:思路較為復雜,可以考慮設計態 Iframe+設計圖層的方案
  • 最終方案

    基于方案 1 的改良,開發 RendererWrapper 包裹組件,在該組件區分設計態與正常態,并開發設計態的交互

渲染區的交互邏輯

  • 渲染區拖拽:基于實際業務與優化交互體驗的角度,渲染區不同組件之間的拖拽,不是完全無限制的,有如下限制

    • 規則 1:基本的布局組件為柵格布局,由 Row 與 Col 組件組成
    • 規則 2:表單頂層布局固定為 Row
    • 規則 3:Row 只能包含 Col 組件,Col 組件可嵌套其他組件,嵌套通過組件 schema 放置進父組件 schema.children 屬性體現
    • 規則 4:除了 Row 與 Col 組件,其他布局組件與原子組件,拖拽進入渲染區時,按照規則 3,均會被 Col 自動包裹,體現為對應的 schema 自動被 Col 的 schema 包裹
    • 規則 5:原子組件不可嵌套子組件,等
    • 以上的規則和限制可在拖拽庫提供的方法中進行實現
  • 渲染區選中組件:

    • 在 RendererWrapper 高亮該組件
    • 在 store 里保存選中組件的 schema
    • 根據選中組件的名稱,由schema可知,獲取到對應組件的設置區表單 schema,渲染設置區表單;表單值也由選中組件的 schema 驅動

設置區

  • 本質是表單組件,由渲染區組件對應的設置表單 schema 驅動渲染
  • 設置區表單值發生輸入變化時,驅動當前選中的組件的 schema 發生變化,完成組件 schema 響應屬性的修改,也驅動設置區表單值的修改

保存

  • 將當前整體的表單 schema 保存到后臺,形成一條表單配置記錄;前端展示表單時通過 id 獲取到 schema,即可展示配置的表單

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/38197.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/38197.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/38197.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

TreeMap 和 TreeSet 的基本情況、特性以及使用場景,并對比它們與 HashMap 和 HashSet

TreeMap 基本情況 實現&#xff1a;基于紅黑樹實現的 NavigableMap。排序&#xff1a;鍵按自然順序或自定義順序&#xff08;通過 Comparator&#xff09;排序。特性&#xff1a; 不允許 null 鍵&#xff0c;但允許 null 值。保證鍵有序。迭代時按排序順序。復雜度&#xff1…

【最長公共前綴 動態規劃】2430. 對字母串可執行的最大刪除數

如果有不明白的&#xff0c;請加文末QQ群。 本文涉及知識點 最長公共前綴 動態規劃 動態規劃匯總 LeetCode 2430. 對字母串可執行的最大刪除數 給你一個僅由小寫英文字母組成的字符串 s 。在一步操作中&#xff0c;你可以&#xff1a; 刪除 整個字符串 s &#xff0c;或者 …

vscode中的字符縮進問題

問題描述&#xff1a; 如圖當一行代碼中出現不同類型的字符時&#xff0c;使用tab縮只是插入了固定數量&#xff08;默認4&#xff09;的空格或制表符&#xff0c;仍然無法對齊。 解決方法&#xff1a; vscode找到設置&#xff0c;搜索fontFamily&#xff0c;對應輸入框寫入mon…

Linux系統編程--進程間通信

目錄 1. 介紹 1.1 進程間通信的目的 1.2 進程間通信的分類 2. 管道 2.1 什么是管道 2.2 匿名管道 2.2.1 接口 2.2.2 步驟--以父子進程通信為例 2.2.3 站在文件描述符角度-深度理解 2.2.4 管道代碼 2.2.5 讀寫特征 2.2.6 管道特征 2.3 命名管道 2.3.1 接口 2.3.2…

集成平臺建設方案(Doc原件)

基礎支撐平臺作為系統總體架構的核心&#xff0c;不僅要促進與各應用子系統和第三方系統的順暢交互&#xff0c;還需確保內部業務在該平臺上能夠靈活擴展。針對這一需求&#xff0c;我們對基礎支撐平臺提出了以下要求&#xff1a; (1) 平臺需基于其基礎架構&#xff0c;為多源異…

python基礎:設置代碼格式

隨著編寫的程序越來越長&#xff0c;有必要了解一些代碼格式的約定&#xff0c;讓你的代碼盡可以能易于閱讀。 python代碼編寫規范為PEP8&#xff0c;有興趣的朋友可以下載觀看&#xff0c;這里僅作簡要說明。 1、縮進 PEP8建議每級縮進都使用4個空格。多數情況下編程語言的…

vscode-創建vue3項目-修改暗黑主題-常見錯誤-element插件標簽-用法涉及問題

文章目錄 1.vscode創建運行編譯vue3項目2.添加項目資源3.添加element-plus元素4.修改為暗黑主題4.1.在main.js主文件中引入暗黑樣式4.2.添加自定義樣式文件4.3.html頁面html標簽添加樣式 5.常見錯誤5.1.未使用變量5.2.關閉typescript檢查5.3.調試器支持5.4.允許未到達代碼和未定…

UE5的安裝與基本操作(一)

文章目錄 前言安裝UE5新建第一個游戲項目基本游覽方式對目標進行變換各種變換對齊 快速定位目標 總結 前言 Unreal Engine 5 (UE5) 是一款由 Epic Games 開發的實時 3D 創作平臺&#xff0c;用于制作游戲、電影、動畫、建筑可視化和其他類型的交互式體驗。UE5 提供了一系列強大…

Flutter第十五彈 Flutter插件

目標&#xff1a; 1.Flutter插件是什么&#xff1f;有什么作用&#xff1f; 插件 (plugin) 是 package 的一種&#xff0c;全稱是 plugin package&#xff0c;我們簡稱為 plugin&#xff0c;中文叫插件。 2.怎么創建Flutter插件&#xff1f; 一、什么是插件 在flutter中&am…

【成都活動邀請函】7月6 | PowerData 數字經濟-“成都“開源行!

【成都活動邀請函】7月6 | PowerData 數字經濟-"成都"開源行&#xff01; 活動介紹活動信息線上直播掃碼報名往期活動回顧專注數據開源&#xff0c;推動大數據發展 活動介紹 九天開出一成都&#xff0c;萬戶千門入畫圖。 自古以來&#xff0c;成都便是國家發展的重要…

第2章-Python編程基礎

#本章目標 1&#xff0c;了解什么是計算機程序 2&#xff0c;了解什么是編程語言 3&#xff0c;了解編程語言的分類 4&#xff0c;了解靜態語言與腳本語言的區別 5&#xff0c;掌握IPO程序編寫方法 6&#xff0c;熟練應用輸出函數print與輸入函數input 7&#xff0c;掌握Python…

【機器學習】機器學習的重要技術——生成對抗網絡:理論、算法與實踐

引言 生成對抗網絡&#xff08;Generative Adversarial Networks, GANs&#xff09;由Ian Goodfellow等人在2014年提出&#xff0c;通過生成器和判別器兩個神經網絡的對抗訓練&#xff0c;成功實現了高質量數據的生成。GANs在圖像生成、數據增強、風格遷移等領域取得了顯著成果…

leetCode.97. 交錯字符串

leetCode.97. 交錯字符串 題目思路 代碼 class Solution { public:bool isInterleave(string s1, string s2, string s3) {int n s1.size(), m s2.size();if ( s3.size() ! n m ) return false;vector<vector<bool>> f( n 1, vector<bool> (m 1));s1 …

C語言使用void *類型作為函數傳參

C語言使用void *怎么理解&#xff1a; 根據本人的理解&#xff0c;他就是指向操作數據區的首地址而已 凡是void指的數據區都要進行第二次初始化數據類型&#xff08;即dtype p(dtype)pdata&#xff09;*。 舉兩個例子&#xff1a; 傳入函數&#xff1a; void tx_data(void …

Sparse4D v3: Advancing End-to-End 3D Detection and Tracking

Sparse4D v3: Advancing End-to-End 3D Detection and Tracking 相關內容&#xff1a;總覽&#xff0c;Sparse4D v1&#xff0c;Sparse4D v2&#xff0c; 單位&#xff1a;地平線(Sparse4D v1 v2 原班人馬) GitHub&#xff1a;https://github.com/HorizonRobotics/Sparse4D …

昇思25天學習打卡營第5天 | 網絡構建

目錄 1.定義模型類 2.模型層 nn.Flatten nn.Dense nn.ReLU nn.SequentialCell nn.Softmax 3.模型參數 代碼實現&#xff1a; 總結 神經網絡模型是由神經網絡層和Tensor操作構成的&#xff0c; mindspore.nn提供了常見神經網絡層的實現&#xff0c; 在MindSpore中&a…

啟動spring boot項目停止 提示80端口已經被占用

可能的情況: 檢查并結束占用進程: 首先,你需要確定哪個進程正在使用80端口。在Windows上,可以通過命令行輸入netstat -ano | findstr LISTENING | findstr :80來查看80端口的PID,然后在任務管理器中結束該進程。在

AI智能客服項目拆解(1) 產品大綱

本文作為拆解AI智能客服項目的首篇&#xff0c;以介紹產品大綱為主。后續以某AI智能客服產品為例&#xff0c;拆解相關技術細節。 AI智能客服是一種基于人工智能技術的客戶服務解決方案&#xff0c;旨在提高客戶滿意度和優化企業運營。利用人工智能和自然語言處理技術&#xff…

MySQL之索引失效的情況

什么情況下索引會失效&#xff1f; 違反最左前綴原則范圍查詢右邊的列不能使用索引不要在索引列上進行運算操作字符串不加單引號導致索引失效以%開頭的like模糊查詢 什么情況下索引會失效&#xff1f; 示例&#xff0c;有user表如下 CREATE TABLE user (id bigint(20) NOT NU…

實驗1 多層感知器設計(MLP)

1.實驗目的 掌握多層感知器的原理。掌握多層感知器的設計、訓練和測試。2.實驗要求 設計一個多層感知器,用于對給定的數據進行分類。要求代碼格式規范,注釋齊全,程序可正常運行。 3.模型設計 實驗設計一個多層感知機,三層機構,只含一個隱藏層,輸入層,隱藏層,輸出層 1…