优维低代码实践:模板

DIY一个自己的C端低代码平台(1)-基础功能实现 前期回顾 组件库设计 juejin.cn/post/708911… 仓库地址 github.com/just-00/my-… 引入 这个系列,我们会带大家实现一个C端的低代码平台 整体的布局参照上图,操作的流程是从gallery-list中选择需要的组件,拖至layout,并在layout中做顺序调整,选中组件在form config中进行属性配置,整个过程中在renderer中展示效果,最后发布成为网站 这是目前的仓库设计(后面可能也会改),蓝色标为一期必做需求,黑色为二期优化需求 这一期实现的是红线 阅读详情

 优维低代码技术专栏,是一个全新的、技术为主的专栏,由优维技术委员会成员执笔,基于优维7年低代码技术研发及运维成果,主要介绍低代码相关的技术原理及架构逻辑,目的是给广大运维人提供一个技术交流与学习的平台。

优维低代码实践连载第⑥期

《模板》

▽

Visual Builder 提供模板能力,您可以将单个或多个构件进行排列组合,组装成您想要的模板,并在需要的地方引入;模板通常被认为是一种具有通用性,并带有一定复用能力的构件;使用模板,让我们不用每次编排都需要从头零开始编排,不需要每次都创建一堆之前已经创建过的实例,减少了重复劳动的工作,并且可以提高程序的健壮性。

下面我们将讲解它是如何使用的。

进入到我们的工程项目中,现在我们收到一个需求,我们需要将新建,编辑任务详情从弹窗编辑的形式做成新的独立页面编辑,在新的页面中也要使用到这个表单,并且结构完全一致;这个时候,我们可以选择将其转化为模板,这样的话,其他页面就可直接引用这个模板并快速使用啦,那么我们要怎么做呢?跟着我的步骤往下操作吧~

一、模板创建

1.1 构件转化为子模板

 

 点击确认后会自动跳转至新创建的模板页面,如下:

 

然后在构件树上点击 tpl-task-form, 看到右侧参数面板,将代理设置改成如下:

1.2 tpl-task-form 模板代理设置修改

# 模板代理,可代理属性,事件,方法,插槽
# 模板等同于一个黑盒,对外只暴露特定接口字段
# 需要通过 ref 指向构件,并且构件需要配置相应的 ref,才能够正确代理出去
# 下面的含义为, 代理ref等于form的构件,
# 代理其事情: validate.error, validate.success
# 代理其方法: setInitValue, validate
# 这个,我们就可以在模板对这个构件进行监听,也可以在外层执行它里面构件的方法
# 具体使用在下面教程会讲述
events:
  validate.error:
    ref: form
    refEvent: validate.error
  validate.success:
    ref: form
    refEvent: validate.success
methods:
  setInitValue:
    ref: form
    refMethod: setInitValue
  validate:
    ref: form
    refMethod: validate

1.3 DATA 数据新增

# 模板的属性,如同构件的属性一样,需要通过外层传入,模板才能正确使用
# 与页面不同,页面的变量存储在 CTX 中,而模板的变量存储在 STATE 中,
# 获取方式不一样,这里
数据名称: isEdit
类型: Value
Value: false


# ======= 分割线 ========
数据名称: staticValues
类型: Value

1.4 Form 编排修改

属性面板-属性:
  # 删除ID,在模板内尽量不要使用ID
  # 因为同个页面,可能使用到多个相同目标,这将导致页面中存在多个相同ID的元素
  # 导致匹配不精准
  layout: horizontal
事件面板-事件:
  # 清空
设置面板:
  # 重点: Ref 为模板内构件的特殊字段, 模板内代理的唯一标识
  # 可以理解为模板内的ID
  Ref: form

在一切修改完之后,记得点击 build & push 按钮哟~

二、编排修改

2.1 新增路由

基于UI8.0 空白页创建两个路由页面,分别是:

别名: 新增任务
path: APP.homepage/task/add
别名: 新增任务
path: APP.homepage/task/:instanceId/edit

2.2 新增任务页面编排修改

在 general-card 构件下新增 tpl-task-form(tips: 刚刚新增的模板) 构件,属性如下:

属性面板-属性:
  id: form
事件面板-事件:
  validate.success:
    - useProvider: providers-of-cmdb.instance-api-create-instance
      args:
        - TASK_FOR_VB_LESSON
        - |-
          <%
            {
              ...EVENT.detail,
              state: "待研发",
            }
          %>
      callback:
        success:
          - action: message.success
            args:
              - 任务创建成功
            # 页面回退
          - action: history.goBack
        error:
          - action: handleHttpError

在 general-card 下面新增 forms.general-form 构件,在其底下新增构件 forms.general-buttons,属性如下:

属性面板-属性:
  cancelText: 取消
  showCancelButton: true
  submitText: 提交
事件面板-事件:
  cancel.button.click:
    # 页面回退
    action: history.goBack
  submit.button.click:
    # 点击确定按钮,调用表单校验方法
    - target: '#form'
      method: validate

回到任务列表,找到添加按钮, 修改其属性:

事件面板-事件:
  general.button.click:
    # 点击添加任务按钮,跳转路由,到添加任务页面
    - action: history.push
      args:
        - '<% `${APP.homepage}/task/add` %>'

2.3 编辑任务页面编排修改

在 general-card 构件下新增 tpl-task-form(tips: 刚刚新增的模板) 构件,属性如下:

属性面板-属性:
  id: form
  isEdit: true
事件面板:
  事件:
    validate.success:
      - useProvider: providers-of-cmdb.instance-api-update-instance
        args:
          - TASK_FOR_VB_LESSON
          - <% PATH.instanceId %>
          - |-
            <%
              _.pick(EVENT.detail, [
                "name",
                "state",
                "assignee",
                "reporter",
                "time",
                "description",
              ])
            %>
        callback:
          success:
            - action: message.success
              args:
                - 任务修改成功
            - action: history.goBack
          error:
            - action: handleHttpError
  生命周期:
    onPageLoad:
      # 在页面加载后,请求获取实例详情的接口
      - useProvider: providers-of-cmdb.instance-api-get-detail
        args:
          - TASK_FOR_VB_LESSON
          - <% PATH.instanceId %>
        callback:
          success:
            # 数据回来后,设置表单的初始值
            - target: '#form'
              method: setInitValue
              args:
                - <% EVENT.detail %>
          error:
            - action: handleHttpError

新增构件 forms.general-form 构件,在其底下新增构件 forms.general-buttons,具体属性同 2.2 一致。

回到任务列表页面,在 table 下定位到编辑按钮,属性修改如下:

事件面板-事件:
  general.button.click:
    # 点击事件,跳转到编辑页面
    - action: history.push
      args:
        - <% `${APP.homepage}/task/${DATA.rowData.instanceId}/edit` %>

三、结语

由于我们在本章节中学习并使用了模板的能力,因此我们在新建页面时,可以快速使用模板进行页面的编排,这大大加快了我们的页面编排速度。

本章节中讲解了构件如何转化成子模板,以及相应的编排修改,另外我们也可以自己不通过构件转化,可以直接新建模版,添加构件,这里就不做展开了;可以自己查看相应文档进行学习,那么模板章节就到此结束啦,下节课我们讲解下菜单的配置使用以及面板屑的配置。

v.builder:v.builder是一个基于gulpJS的前端自动化构建框架 前端自动化开发框架和部署说明 by Pang.J.G 本项目基于nodejs环境下的Gulp.JS 安装 nodeJS 环境 前往 安装nodeJS 注意系统是32位还是64位的,选择对应的版本 如果是windows系统,需自行设置好环境变量,将nodejs的路径加入到系统的 path 环境变量中 安装 gulp 全局支持,在终端执行 npm install -g gulp 项目部署和初始化 本代码库包含了一个静态demo,如在实际开发的项目中部署,例如,你打算将前端静态资源放在 ~/statics/ 文件夹,那么: STEP 1:复制源码 将 build 目录下的源码复制到 statics 文件夹下; 如果,单独对源码进行代码管理,可以使用以下命令: git clone https://github.com/lmtdit/bdCore.git build STEP 2:安装依赖 进入b 立即下载

相关推荐

UE4游戏开发:GameInstance与GameMode的实战应用与避坑指南

本文深入解析了UE4中GameInstance与GameMode的核心差异与实战应用。GameInstance作为贯穿游戏进程的全局单例,负责跨关卡数据持久化与系统管理;而GameMode则定义特定关卡内的游戏规则与逻辑,随关卡加载销毁。文章通过数据存储、动态模式切换及网络游戏等场景,提供了清晰的应用指南与常见避坑方案,帮助开发者构建更健壮的UE4游戏架构。

kubernetes8ctl的博客 230

推荐一款C端的低代码产品

学完这款低代码,亲自和HR谈薪资

m0_61933976的博客 1万+

MuJoCo柔性体仿真实战:从FlexComp建模到自定义模型导入

柔性体仿真是机器人交互研究中不可或缺的一环,MuJoCo作为高精度物理求解器,凭借高效的求解速度与批量并行能力,成为强化学习与软体抓取任务的热门选择。其FlexComp机制将连续材料离散为粒子-约束系统,以较低建模成本模拟布料、软组织等形变行为,相比Gazebo等平台更具实时性与可扩展性。技术价值体现在自定义柔性体建模与导入流程中:通过XML配置网格密度、间距与材料参数,即可生成贴合任务需求的软体垫子或硅胶抓手。在柔性抓取、颗粒抓手、医疗仿真等场景中,该方法能快速构建可训练的环境。围绕环境搭建、FlexCo

weixin_29045585的博客 162

SGLang框架PyTorch版本兼容性终极解决方案:深度优化与跨平台部署指南

当你在不同硬件平台上部署SGLang时,是否遇到过这些令人头疼的问题? **场景一:生产环境中的版本冲突** - 在NVIDIA A100服务器上安装时,`torch.cuda.is_available()`返回True,但sgl-kernel编译失败 - 错误信息显示"CUDA version mismatch: expected 12.3, found 11.8" - 尝试降级PyTorch

gitblog_00055的博客 469

数学建模--十大经典常用算法

数学建模十大算法:灰色预测,蒙特卡洛,遗传算法,模拟退火法,组合算法,神经网络,动态规划,聚类算法,类比法,概率算法,Floyd算法

qq_51533426的博客 5647

C# CAD2016 多边形顶点按方向重新排序

这样,通过以上步骤,我们找到了一个多边形的一个候选起始顶点(可能位于西北方向),并且已经获取了该多边形的边界框信息,这些信息对于后续判断顶点排列顺序及处理其他相关问题具有重要意义。完整地处理八个方向(东北、东南、西南、西北、北、南、东、西),我们可以创建一个方法来获取多边形相对于给定点的最近顶点及其对应的方向。对象(或类似的多边形表示方式),其中包含了多边形的顶点。//附送AI 图片无版权 随意用 龙年大吉大利。

转眼之间 一路有你 1356

ansible API 常用模块

常用模块 用于读取yaml,json格式的文件 from ansible.parsing.dataloader import DataLoader #用于管理变量的类,包括主机,组,扩展等变量 from ansible.vars.manager import VariableManager #用于创建和管理inventory,倒入inventory文件 from ansible.i...

weixin_34194379的博客 483

2026最新openclaw(clawbot/moltbot)真正在自己个人电脑上搭建部署,配置飞书远程远程让AI助理操控电脑完成任务,以及结合ollama无限token实现7*24小时工作(附配置)

2026最新openclaw(clawbot/moltbot)真正在自己个人电脑上搭建部署,配置飞书远程远程让AI助理操控电脑完成任务,以及结合 ollama 无限token实现7*24小时工作,以及部署安装需要的 skills 完成复杂的工作任务(附完整可以运行的配置文件)。 很多人已经会配置安装 openclaw 了 ,但是 安装完成之后真正让电脑自动运行起来的很好,完成出色工作的更少,最常见的就是聊聊天,或者执行一些简单的命令,理解要让电脑自动化工作,openclaw、skills、大模型这三样。

代码讲故事 2963

优维低代码实践:自定义模板

state 为模板级别的数据变量,它跟 Context 上下文的数据一样,不同的是 context 类似我们的全局变量,作用域是整个路由,而 State 能控制在模板实例的作用域下,数据封装在模板内部、外部不可访问,同时一个模板的多个实例之间的数据互不影响。模板也跟构件一样具有属性,方法,事件,插槽,不同的是它们只是代理其内部构件用的,模板只是起到封装的容器作用,我们具体看下模板代理的配置项,我们以小产品 「FIRST-APP-LESSON-4」中 「tpl-task-form」 为例子。

EasyOps_DevOps的博客 1267

柔性电极材料新突破:清华团队实现0.1mV级脑信号采集精度

清华团队的 0.1mV 级柔性电极突破,不仅是材料科学与神经工程的跨界胜利,更标志着脑机接口从 “信号采集” 向 “神经交互” 的范式转变。当电极与脑组织实现 “柔性共生”,人类首次拥有了窥探大脑微观电活动的 “精密探头”,这既是神经疾病诊疗的里程碑,更是人机融合时代的新起点。随着技术标准化与产业生态的完善,这场始于实验室的 “柔性革命”,正加速向临床病房、智能工厂、消费电子等场景渗透,为脑机接口的大规模应用铺设 “柔性跑道”。:当柔性电极实现 “神经信号的无损捕捉”,如何平衡技术创新与伦理边界?

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 2946

ClawManager实战:OpenClaw批量部署+精细化权限管控,运维效率拉满90%

ClawManager彻底解决了OpenClaw规模化部署的运维痛点,它不是简单的“批量部署工具”,而是一套完整的企业级管理方案——从模板配置、批量部署,到权限管控、监控审计、AI治理,覆盖OpenClaw全生命周期管理,让OpenClaw从“个人工具”升级为“企业级AI基础设施”。对于中小企业,Docker一键部署即可快速落地,无需复杂配置;对于大型企业,K8s部署支持高可用、横向扩展,结合Keycloak对接企业现有认证系统,可完美融入企业IT架构。

2601_94871597的博客 610

优维低代码实践:Context / State

State 的能力和 Context 几乎完全一致,不同的是,Context 的作用域是整个页面、是全局的,我们的自定义模板,同一个模板在页面中可能有多个实例,如果直接使用 Context,则多个实例间的数据会互相影响。而 State 是局部的状态数据,相当于我们的局部变量,其只应用于模板的内部。PATH 的配置项是给 context 分组用的,当一个路由管理的 context 很多时,为了方便管理和查找,我们可以给每一个 context 进行分类,这样同一类下的 context 会放在同一目录下展示。

EasyOps_DevOps的博客 1146

【即插即用模块】注意力篇 | TGRS 2025 | ASD:自适应频域解耦,动态拆分高低频+空间注意力,频域空间特征双增强!

摘要: FDMF-Net提出了一种频域解耦多模态融合网络,核心组件为振幅谱解耦模块(ASD)。ASD通过自适应频域拆分和频域-空域协同增强,有效分离模态不变与模态特定特征。该模块利用MLP学习动态阈值调整高低频比例,并通过空间注意力分别强化频域特征,在遥感语义分割任务中实现了细节与结构的协同增强。实验表明,ASD模块能减少模态内冗余,提升特征判别性,为多模态数据融合提供了新思路。代码已开源,适用于需要强化细节与结构的视觉任务。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 312

优维低代码:Legacy Templates 构件模板

随着业务规模的扩展,一些常用构件的配置开始变得复杂,Storyboard 的配置和编排的成本随之增加。为了解决这个问题,我们提供了构件模板的概念,将 Storyboard 中复杂的构件配置抽象并封装出一层构件模板,隐藏内部复杂的结构化配置,对外只暴露简洁的、必需的参数。优维低代码技术专栏,是一个全新的、技术为主的专栏,由优维技术委员会成员执笔,基于优维7年低代码技术研发及运维成果,主要介绍低代码相关的技术原理及架构逻辑,目的是给广大运维人提供一个技术交流与学习的平台。使用方式参考 BrickConf。

EasyOps_DevOps的博客 460

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

优维低代码实践:添加构件

找到构件后,可以通过鼠标拖拽构件的方式,将构件拖拽到屏幕中间的iframe预览区域,iframe预览区域可以快速接收构件信息并渲染效果。页面是不同的构件基于一定的业务逻辑和交互形成的。构件作为页面中最基础的元素,分为原子构件、通用构件、业务构件、模板(可复用的具有一定业务逻辑的多个构件封装而成)等。ps: 父构件的插槽位有哪些,可以点击父构件的说明文档进行查阅,不同的构件插槽位名称不同,位置不同;构件的添加要基于路由,即构件的添加的前提是要有一个路由页面,此处省略添加路由的介绍,具体可参考路由创建。

EasyOps_DevOps的博客 1048

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

优维低代码实践:片段

优维低代码技术专栏,是一个全新的、技术为主的专栏,由优维技术委员会成员执笔,基于优维7年低代码技术研发及运维成果,主要介绍低代码相关的技术原理及架构逻辑,目的是给广大运维人提供一个技术交流与学习的平台。片段更类似于在编排过程中复制某个构件(该构件下的所有子构件都被复制),此时在粘贴板中不止存在该构件,连带将该构件下的所有构件一并保存在粘贴板中。片段定义之后,调用片段并修改内容,不会对原片段产生影响;片段被调用后,再去修改片段内构件的内容,不会对已被调用的片段产生影响。添加、修改片段内的构件信息。

EasyOps_DevOps的博客 742

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

优维低代码:Template State 模板状态数据

有时候我们希望在模板内进行消费类似 Context 上下文的数据,但又希望这些数据能控制在模板实例的作用域下:数据封装在模板内部、外部不可访问,同时一个模板的多个实例之间的数据互不影响。优维低代码技术专栏,是一个全新的、技术为主的专栏,由优维技术委员会成员执笔,基于优维7年低代码技术研发及运维成果,主要介绍低代码相关的技术原理及架构逻辑,目的是给广大运维人提供一个技术交流与学习的平台。该状态数据作用域为模板实例,因此,同一个模板的多个实例之间的数据是隔离的。在模板外部传递状态数据:​​​​​​​。

EasyOps_DevOps的博客 448

优维低代码:Use Resolves

在早期版本中,我们只提供了通过provider指定CSSSelector并需提前在bricks或providers中主动声明对应的Provider构件的方式来使用useResolves,例如以下的构件配置,平台在渲染该构件前,将首先找到provider匹配的对应的。优维低代码技术专栏,是一个全新的、技术为主的专栏,由优维技术委员会成员执笔,基于优维7年低代码技术研发及运维成果,主要介绍低代码相关的技术原理及架构逻辑,目的是给广大运维人提供一个技术交流与学习的平台。...

EasyOps_DevOps的博客 237

优维HAO案例:某头部券商运维中台与低代码平台建设

基于这一系列痛点,客户的核心诉求非常明确:构建一个能够有效整合运维能力、显著降低工具开发与应用门槛的统一平台,以支持运维团队更快速、自主地定制场景化工具,实现运维效能的整体跃升和团队自主创新能力的增强。在首批7个典型运维场景工具的开发过程中,沉淀了超过100个可复用的后端业务构件和多个前端业务构件(如集群搜索框、实例查询组件等),为后续开发积累宝贵资产。成功整合了包括配置管理(CMDB)、持续交付、自动化运维、网络管理、事件告警、单点登录等在内的十余项核心运维工具能力,形成统一的API服务目录。

EasyOps_DevOps的博客 829

优维低代码:Custom Templates 自定义模板

在内部构件的属性中引用 TPL.* 时,只能在构件初始时拿到其初始值,此时该属性变量相当于一个常量,当模板实例的对应属性在运行时重新赋值时,该内部构件的属性不会发生变化。Custom Templates 可以代理内部构件的属性、事件、插槽和方法,以此实现将 Storyboard 上为该模板配置的属性和事件等映射到模板内部的指定构件上。当使用 mergeProperty 时,属性是从模板到内部构件单向流动的,即如果直接更改内部构件的相关属性,无法影响直接从模板读取的属性。...

EasyOps_DevOps的博客 667

优维“统一开放平台”:开放、开发、集成、客制化

这款由优维自主设计与研发,集数据开发、能力开放、能力集成、客制化为一体的统一开放平台,具备应用市场、应用开发、连接能力、采控平台、API集市、开发者工具等功能模块,可为用户提供便捷的运维开发和业务管理,在提高运维人员等工作效率的同时,提升业务的连续性和安全性。对于用户自研微应用,内置应用授权、应用上架等工具,以支撑自研微应用的研发、上架、使用的全生命周期。我们的目标,是希望通过低代码开发平台的能力帮助客户以低成本、短周期、高效率的方式,基于自身的开发需求,快速完成应用系统的开发搭建。

EasyOps_DevOps的博客 1255

优维低代码:构件基本说明

优维低代码技术专栏,是一个全新的、技术为主的专栏,由优维技术委员会成员执笔,基于优维7年低代码技术研发及运维成果,主要介绍低代码相关的技术原理及架构逻辑,目的是给广大运维人提供一个技术交流与学习的平台。 在上一篇中,我们分享了在编排详解中是如何进行菜单配置的,本期我们将继续来解读编排详解中的构件基本说明。 #构件配置 "bricks": [ { "brick": "basic-bricks.micro-view", "slots": { "titleBar"...

EasyOps_DevOps的博客 213

优维低代码:解析构件开发 Step by Step

低代码是优维科技长期深耕的技术板块,在漫长的创业周期中,我们通过不断实践积累和迭代优化,沉淀出EasyMABuilder前端低代码平台,迄今已成功赋能大量优质用户,为多个行业带来前所未有的轻盈体验。 EasyMABuilder成功的背后,是优维人数年的技术探索和EasyOps产品哲学的落地,蕴含了主创团队对低代码生态的深度思考和实践创新。 我们特别推出低代码专题撰稿计划,以专栏系列文章的形式解构低代码在DevOps领域的技术表现。 上一篇文章,我们讲述了在 EasyMABuilder 中如何通...

EasyOps_DevOps的博客 402

优维「架构可视化(视图)」:能力联动让系统架构看得见摸得着

以系统关联的应用为例,如果从CMDB中,系统下的应用从四个增加到五个,在设置了自动更新后,图中的应用也将根据CMDB实例的变化而更新,从而在图表上从四个应用变为五个。在视图的消费场景上,架构视图提供了对应的构件,同时也支持内部平台的一些视图消费场景。针对用户需求差异化呈现出来的产品能力多样化,是优维架构可视化(视图)的底色之一,后续我们也将进一步升级产品,相信那个时候的界面体验和功能差异将会更大,好刀宜藏,敬请拭目以待。在优维的产品方法论中,在探讨架构视图的管理时,我们首先需要理解架构视图的整体目标。

EasyOps_DevOps的博客 915

企业 IT 部门如何评估 Agent 供应商

2023年以来AI Agent技术进入商业化落地爆发期,全球超过60%的大中型企业已将Agent纳入IT建设 roadmap,涵盖运维自动化、内部智能助理、客户服务、合规审计、生产巡检等数十个场景。但当前Agent供应商市场鱼龙混杂:有套壳大模型的伪Agent服务商、有技术能力不足导致交付烂尾的创业公司、有绑定公有大模型存在数据泄露风险的通用平台商,企业IT部门选型踩坑率高达72%(来源:Gartner 2024年AI采购风险报告)。

小白菜的博客 247
上一篇: 优维低代码实践:编排优化Plus
下一篇: DataOps是现代数据堆栈的未来吗?
优维科技EasyOps
博客等级 码龄5年 1483粉丝 395原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值