优维低代码实践:页面编排优化与数据联调

news2024/11/24 11:08:13

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


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

《页面编排优化与数据联调》

下面我们以一个空模版为基础创建 testPage 页面,并提供简单的Visual Builder编排界面操作交互演示视频,方便大家了解编排是如何使用的。

1.1 属性修改

 1.2 新增构件(通过组件库拖拽至画布&通过组件库拖拽至构件树&纯构件树新增)

 1.3 构件树拖拽排序

 1.4 删除构件(将鼠标移入构件上,点击右键选择删除)

二、编排修改

在熟悉完上述几种场景的操作后,回到我们创建的第一个路由(页面),我对之前创建的的编排做了一些改造,将它的功能进行了简单地完善,将它变成了一个任务列表展示页面,并且支持查询任务模型数据,以及新增任务实例数据,还支持了搜索能力,那么我是怎么做到的呢,下着跟着我的操作学习一下吧!

 2.1 DATA面板添加&修改数据

在左侧面板下放DATA面板,展开并找到 hostList,点击打开弹窗,将其修改为以下数据结构

数据名称: taskList
类型: Provider
Provider(接口): providers-of-cmdb.instance-api-post-search-v3
Args(参数):
  - TASK_FOR_VB_LESSON
  - fields:
      - name
      - state
      - assignee
      - reporter
      - description
    # 数字格式化语法,QUERY表达式是从URL中读取的参数
    # 譬如:https://admin.easyops.local/next/first-app?page=1&pageSize=10
    # 则 QUERY.page 等于 1, QUERY.pageSize=10
    # 下方表达式含义如下:
    # page参数取自URL上的参数,并且获取完会转化为数字类型格式,如果URL参数中没有page
    # 则默认等于1,pageSize同理
    page: '${QUERY.page=1|number}'
    pageSize: '${QUERY.pageSize=20|number}'
Extra provider settings(额外的接口配置):
  lazy: true
Extra basic settings(额外的基础配置):
  track: true

如下图:

 2.2 查询模型数据并展示

在构件树上定位到table构件,或者在画布上选择table构件,右侧参数面板将联动显示,在右侧参数面板进行比编辑,填入以下数据后,点击保存。

属性面板-属性:
  columns:
    - dataIndex: name
      key: name
      title: 任务名称
    - dataIndex: state
      key: state
      title: 状态
    - dataIndex: assignee
      key: assignee
      title: 负责人
  dataSource: '<% "track context", CTX.taskList %>'
  showCard: false
事件面板-生命周期:
  onPageLoad:
    # 生命周期,当页面加载并且构件都渲染完时触发
    # context.refresh时刷新某个DATA的数据(必须设置lazy:true)
    # 这里我们刷新了 taskList, 实际上是想等页面渲染完再执行请求
    # 这样做的好处是可以减少因请求导致的页面白屏时间过长
    - action: context.refresh
      args:
        - taskList

在点击保存完之后,我们即完成了查询 TASK_FOR_VB_LESSON 模型下的实例数据,并进行展示这一动作,但是由于该模型下还没有实例数据,因此table目前的展示仍旧是空的,需要我们新增完数据后table才会有相应的数据展示

2.3 新增实例弹窗构件&新增数据接口对接

在构件树上新增构件,请在创建时注意他们的嵌套关系

- 任务列表
  - tpl-ui8-layout
    ...
  # 以下为新增部分
  - basic-bricks.general-modal
    - content(挂载点名称)
      - forms.general-form
        - item(挂载点名称)
          - forms.general-input
          - forms.general-text-area
          - forms.cmdb-instance-select
          - forms.cmdb-instance-select

对应的构件属性分别如下:

属性面板-属性:
  # id为构件的唯一标识,同个页面下不允许有重复id存在
  # 否则会在页面执行期间可能会得到非预期结果
  id: modalAddTask
  modalTitle: 添加任务
  closeWhenOk: false
  maskClosable: false
事件面板-事件:
  # 事件由构件暴露,在特定情况下事件会触发,用户可以按需定义事件的回调动作
  # 构件提供的事件可在构件文档中进行查看
  basic-bricks.general-modal.confirm:
    # 说明:当弹窗点击确认时触发事件
    # 选择构件ID为 AddTaskForm的元素,执行其内部方法:validate
    - target: '#AddTaskForm'
      method: validate
  modal.close:
    # 说明: 当弹窗关闭时
    # 选择构件ID为 AddTaskForm的元素,执行其内部方法 setInitValue, 参数为空对象
    # 表示弹窗关闭后就清楚表达值,防止弹窗再打开时出现脏数据
    - target: '#AddTaskForm'
      method: setInitValue
      args:
         - name: ""
          description: ""
          assignee: ""
          reporter: ""
设置面板-放置于: portal
属性面板-属性:
  id: AddTaskForm
  layout: horizontal
事件面板-事件:
  validate.error:
    # 表单校验失败时,弹出消息弹窗,并提示"表单填写失败"
    - action: message.error
      args:
        - 表单填写失败
  validate.success:
    # 表单校验成功时,获取id为modalAddTask的构件,使其入参修改
    - target: '#modalAddTask'
      properties:  
        # 弹窗确认按钮禁用,确保用户不会重复点击,创建相同实例
        okDisabled: true
    # 新增实例接口请求
    - useProvider: providers-of-cmdb.instance-api-create-instance
      args:
        - TASK_FOR_VB_LESSON
        - |-
          <%
            {
              # EVENT.detail为事件透传的信息,这里是表单校验成功的数据
              # 结构等于表单定义的值: 
              # { name: xxx, description: xxx, assignee: xxx, reporter: xxx }
              ...EVENT.detail,
              # 新增状态默认值:待研发
              state: "待研发",
            }
          %>
      # 回调事件
      callback:
        # 接口执行成功调用方法
        success:
          - action: message.success
            args:
              - 任务创建成功
          - target: '#modalAddTask'
            properties:
              okDisabled: false
          # 由于我们新增了数据,此时需要更新 table 的数据
          # 让页面展示最新状态
          - action: context.refresh
            args:
              - taskList
          - target: '#modalAddTask'
            method: close
        # 接口执行失败调用方法
        error:
          # 触发错误提示弹窗
          - action: handleHttpError

- forms.general-input
  属性面板-属性:
    name: name
    label: 任务名称
    placeholder: 请输入任务名称
    required: true
# ============ 分割线 ============== 
- forms.general-text-area
  属性面板-属性:
    name: description
    label: 任务描述
    autoSize:
      maxRows: 8
      minRows: 3
    max: 10
    message:
      max: 最长长度限制,10
      required: 请输入内容
    placeholder: 请填写任务描述
    required: true
# ============ 分割线 ============== 
- forms.cmdb-instance-select
  属性面板-属性:
    name: assignee
    label: 负责人
    objectId: USER
    required: true
    placeholder: 负责人
    allowClear: true
    fields:
      label:
        - name
      value: name
    instanceQuery:
      state: valid
    labelTemplate: '#{name}'
# ============ 分割线 ============== 
- forms.cmdb-instance-select
  属性面板-属性:
    name: reporter
    label: 汇报人
    objectId: USER
    required: true
    placeholder: 汇报人
    allowClear: true
    fields:
      label:
        - name
      value: name
    instanceQuery:
      state: valid
    labelTemplate: '#{name}'

至此,您就完成了新增任务的能力啦!点击工具栏上的 "检查" 按钮将其关闭,体验一下具体的页面交互吧~

三、结语

通过本节实践,您学习了我们最常用的几个API-CMDB的增删改查操作,构件的操作,查询接口的使用,以及新增接口的使用,这基本涵盖了我们日常页面编排的基本情况,其他操作基本上都是基于这些步骤之上进行拓展;下节课将基于这节课的版本上,进行更多高级的操作!

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

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

相关文章

NEEPU Sec 2023公开赛Reverse题目复现

文章目录 一.Base二.How to use python1.程序逻辑分析2.爆破flag[11]~flag[14]3.爆破sha14.sha256掩码爆破 三.IKUN检查器1.查看程序信息2.分析程序逻辑3.button1_conClick函数4.check1函数5.check2函数6.check3函数7.check4函数8.check5函数 四.junk code1.使用32位动态调试工…

[Nginx 发布项目] 打包后的项目,使用nginx发布

前提 &#xff1a;使用的 mars3d 沐瑶大佬 修改后的nginx , - 下载地址 使用的是 Mars3D三维可视化平台 | 火星科技 修改后的 nginx 发布的服务&#xff0c;确保nginx发布服务时正常 &#xff1b; 如果不是&#xff0c;那这里应该没有你想要的答案&#xff1b; 1、直接替换…

006 - RCC时钟树(一)时钟树内容

006 - RCC时钟树&#xff08;一&#xff09;时钟树内容 本节内容一定要结合RCC时钟树和官方手册学习&#xff0c;如果看不明白的话&#xff0c;建议看一下野火官方的教程&#xff0c;火哥讲这节讲的很详细&#xff0c;看一遍基本就能理解了。 上节内容中分析了启动代码&#…

Web缓存服务——Squid代理服务器应用

正向代理&#xff1a;代替客户端向服务端发送请求。 反向代理&#xff1a;代理服务端&#xff0c;将请求转发给多个服务端。 一、Squid代理服务器介绍 Squid 主要提供缓存加速、应用层过滤控制的功能。 1.1 代理的工作机制&#xff08;缓存网页对象&#xff0c;减少重复请求…

2023年,Facebook Messenger群发这样做

使用SaleSmartly的企业都知道&#xff0c;SaleSmartly&#xff08;ss客服&#xff09;能在 Facebook Messenger群发信息&#xff01;Facebook Messenger在全球最受欢迎通信软件中排名第三&#xff0c;紧追头两位的 WhatsApp和微信。善用 Facebook Messenger群发工具&#xff0c…

华为OD机试真题 Java 实现【区块链文件转储系统】【2023Q2 200分】

一、题目描述 区块链底层存储是一个链式文件系统&#xff0c;由顺序的N个文件组成&#xff0c;每个文件的大小不一&#xff0c;依次为F1,F2…Fn。 随着时间的推移&#xff0c;所占存储会越来越大。 云平台考虑将区块链按文件转储到廉价的SATA盘&#xff0c;只有连续的区块链…

为什么都在学python?

自然是因为Python简单易学且应用领域广&#xff01; Python近段时间一直涨势迅猛&#xff0c;在各大编程排行榜中崭露头角&#xff0c;得益于它多功能性和简单易上手的特性&#xff0c;让它可以在很多不同的工作中发挥重大作用。 正因如此&#xff0c;目前几乎所有大中型互联…

毕业三年月薪才21K,真是没出息......

“害&#xff0c;毕业三年月薪才拿21k,真失败&#xff0c;真的给同龄人拖后腿&#xff01;”这是人能讲出来的话&#xff1f;这就是凡尔赛天花板&#xff1f;这就是我公司的测试部门的人说出来的话&#xff0c;他计算机专业毕业三年&#xff0c;包括实习&#xff0c;在我们公司…

LeetCode:28. 找出字符串中第一个匹配项的下标

28. 找出字符串中第一个匹配项的下标 1&#xff09;题目2&#xff09;代码1.方法一&#xff1a;每个字符进行匹配2.方法二&#xff1a;截取字符串进行匹配 3&#xff09;结果1.方法一结果2.方法二结果 1&#xff09;题目 给你两个字符串 haystack 和 needle &#xff0c;请你在…

Dropwizard 开发环境搭建

Dropwizard是一个Java框架&#xff0c;其目标是提供高性能、高可靠的Web 应用程序的实现。 一、使用Maven原型创建项目 1、新建项目->选择Maven Archetype 填写好项目名称、路径、选择JDK版本&#xff0c;这里使用JDK11及以上的版本&#xff0c;如下图所示&#xff1a; 2…

自监督对比学习系列论文(一):无引导对比学习--MOCO,SimCLR

自监督对比学习 对比学习&#xff08;self-supervised learning&#xff09;的应用场景是用无标记或者少标记的数据进行模型的预训练以得到一个较好的预训练模型&#xff0c;然后便可将该模型轻松的迁移到到下游任务上。显而易见的&#xff0c;对比学习的难点在于我们如何在没有…

【论文下饭】PatchTST中的channel-independence

PatchTST中的channel-independence 总结PatchingChannel-independence A Time Series is Worth 64 Words: Long-term Forecasting with Transformers 时间&#xff1a;2022 引用&#xff1a;8 ICLR 2023 代码&#xff1a;https://github.com/yuqinie98/PatchTST 中文参考&#…

软件开发人技能变现方案来啦~

java单体服务Uniapp客户端 欢迎大家来关注java单体服务Uniapp客户端模式开发应用程序这个模式下产品的特点互联网大厂产品特点小服务小产品-存在价值普通人慢慢挣小钱 欢迎大家来关注 你好&#xff01; 这可能是你第一次来“莹未来”这里&#xff0c;郑重欢迎您。如果你想学习…

firewalld防火墙详细介绍

目录 一、firewalld概述 二、firewalld与iptables的区别 1.位置不同 2.配置存储位置不同 3.规则运行不同 4.防火墙类型不同 三、firewalld区域的概念 四、firewalld防火墙9个区域 1、trusted&#xff08;信任区域&#xff09; 2、public&#xff08;公共区域&#xf…

JavaScript中的tab栏切换制作(排他思想)

文章目录 实现效果图排他思想tab栏切换制作思路代码部分 实现效果图 整个页面分为2个部分&#xff0c;tab_list部分&#xff08;上半部分&#xff09;和tab_con部分&#xff08;下半部分&#xff09; tab_list部分包含5个li&#xff0c;它们分别与tab_con部分的5个div盒子一一…

Eyeshot Fem 2023.1 你选Fem还是Ultimate Crack

Eyeshot Fem--当然选Fem Everything in Ultimate, plus Geometry meshing and Finite Element Analysis. Scope Modules Image Gallery Features Scope Eyeshot Fem edition is designed for Geometry meshing and Finite Element Analysis. Modules Geometric modules includ…

《终结拖延症》重新拥有计划每天的自信和控制力

关于作者 威廉区瑙斯&#xff0c; 美著名心理治疗 专家 &#xff0c; 拥有 超过 30 年 心的 理治疗 经 &#xff0c;验 他 专 精的研究 领域 &#xff0c; 是 为 代 都 市 群提 供负 面 心 理 引 导 和 治疗 &#xff0c; 比 如 抑郁 、 心 理 亚健 康 、 拖 延 症 等 等 。 除…

redis未授权访问漏洞利用+redis日志分析

redis未授权访问漏洞利用redis日志分析 redis未授权访问 远程连接redis kali: redis-cli -h IP redis常用语句 set key “value” 设置键值对 get key 获得值 incr intkey 数字类型值加1 keys * 获取当前数据库中所有的键 config set dir /home/test 设置工作目录 config set…

VMware ESXi 6.5 U3 Final - ESXi 6 系列最终版下载

VMware ESXi 6.5 U3 Final - ESXi 6 系列最终版下载 VMware ESXi 6 Standard 请访问原文链接&#xff1a;https://sysin.org/blog/vmware-esxi-6/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org VersionRelease NameRelease …

weblogic CVE-2014-4210 SSRF漏洞

CVE-2014-4210 SSRF漏洞 Weblogic 中存在一个SSRF漏洞&#xff0c;利用该漏洞可以发送任意HTTP请求&#xff0c;进而可以攻击内网中Redis、Fastcgi等脆弱组件 该漏洞存在于/uddiexplorer/SearchPublicRegistries.jsp SSRF&#xff1a;服务端请求伪造&#xff0c;伪造存在该漏洞…