当前位置: 首页 > article >正文

Vue3 界面设计插件 microi-pageengine 入门教程一

系列文章目录

一、Vue3空项目快速集成 microi-pageengine 插件


文章目录

  • 系列文章目录
  • 一、前言
  • 二、排版布局
    • 2.1 功能导航区
    • 2.2 组件容器区
    • 2.3 属性面板区
  • 三、数据来源配置
    • 3.1 json数据源
    • 3.2 html数据源
  • 四、事件穿透
  • 五、数据保存持久化
  • 六、总结


一、前言

上一篇文章介绍了 vue3 空项目如何快速集成 microi-pageengine 插件,这一章节主要介绍 microi-pageengine设计思路原理 ,以及后续的升级计划。至于具体的 内置组件 介绍要到后面章节来一一详细介绍。

二、排版布局

主要介绍设计界面整体的排版布局,当然这些布局后续可能会有变动,但暂时是这个样子的。

2.1 功能导航区

在这里插入图片描述
功能按钮:

  • 查看json : 当前页面渲染内容会保存在一个大的 json 里,可以将设计好的json 持久化保存起来,比如保存到一个 json 文件或者存到数据库。反之,可以使用该 json 渲染页面。
  • 清空容器:当设计面板区域容器组件过多且想重新设计,则可以使用该功能重置清空面板。
  • 内置模板:内置模板主要给用户以参考,放一些常用排版格式和组件用法。
  • 预览:在设计过程中可以通过预览来查看实际效果。
  • 保存 : 该功能用于做持久化的,可以通过 【保存】将页面 json 通过事件透传给指定的方法,可以将自己的保存逻辑写在该方法体内。
  • 主题 : 内置了明亮暗黑 两种主题。
  • 初始化:初始化主要用于清除缓存、引导提示等。

2.2 组件容器区

在这里插入图片描述
组件容器区主要存放容器和组件库,界面设计主要包括三大元素:

  • 页面:页面在这里指整体设计面板区域,包含页面信息、页面默认通用配置和开关等。
  • 容器:容器类似于包装器,主要用来排版布局。
  • 组件:组件就是最小单元了,组件依附在容器里,一个容器可以包含多个组件。

2.3 属性面板区

在这里插入图片描述
属性面板区主要用来参数配置,通过参数调节实现界面样式和效果的变换。

  • 页面参数:页面参数全局唯一且固定。
  • 容器参数:容器参数针对每个容器配置,参数也是固定不变的。
  • 组件参数:组件参数分为通用配置和特色配置,通用配置适用于每个组件,一般记录组件的信息和样式控制,特色配置可能就不尽相同了,毕竟每个组件都有不同的特性。

三、数据来源配置

数据来源配置分为两种,一种是JSON数据源,数据源一般为对象和数组。另一种是HTML代码,这种数据格式主要用于超文本组件。

3.1 json数据源

我们就拿工作台组件举个例子:

在这里插入图片描述
在这里插入图片描述
当我们修改 json 数据后,关闭窗口会实时同步渲染修改后的展示效果。如果我们需要动态数据,则可以在数据来源内容框输入 webapi 的远程接口地址,返回内容格式如上图即可。

注意:请注意接口地址和界面引擎 跨域 的问题,还一个就是 https 的问题。

接口内置了 token 参数,在我们集成页面把 token 参数设置后,后面无需关心token 问题,请求接口会自动带上 token

3.2 html数据源

这种 html 数据源格式仅限于【超文本】组件:

在这里插入图片描述
在这里插入图片描述
如果我们需要非常复杂的界面,没有组件能满足,那么我们可以直接写HTML代码来实现自己想要的效果。

四、事件穿透

当我们想在组件内想实现点击某个区域来进行事件回调,也是可以实现的,目前已整理事件类型如下:

onMounted(() => {//如果需要token,设置token,该token一经接收即刻存入pinia状态机,每次调用接口通过拦截器自动处理token头,无需每次手动写,持久化用的localStorage ,可以F12查看pageEngineStore.setToken('')//下面这一大串监听,其实也可以写到一个事件里,通过key value 键值对来区分,暂时先这么着吧//监听保存页面JSON事件EventBus.on('saveFormJson', (saveFormJson) => {console.log('监听saveFormJson', saveFormJson)})//监听日历选择日期事件EventBus.on('calendarSelDate', (data) => {console.log('监听calendarSelDate', data)})//卡片更多跳转EventBus.on('cartMoreLink', (linkurl, linktype) => {console.log('监听cartMoreLink', linkurl, linktype)if (linktype == 'router') {router.push(linkurl)}})//链接组件跳转EventBus.on('linkWidget', (linkurl, linktype) => {console.log('监听linkWidget', linkurl, linktype)if (linktype == 'router') {router.push(linkurl)}})//鱼骨图跳转EventBus.on('fishWidget', (linkurl) => {console.log('监听fishWidget', linkurl)router.push(linkurl)})//步骤跳转EventBus.on('stepsWidget', (id, linkurl) => {console.log('监听stepsWidget', id, linkurl)router.push(linkurl)})//地图marker点击事件EventBus.on('mapMarkerClick', (item) => {console.log('监听mapMarkerClick', item)})
})//销毁
onBeforeUnmount(() => {EventBus.off('saveFormJson')EventBus.off('calendarSelDate')EventBus.off('cartMoreLink')EventBus.off('linkWidget')EventBus.off('fishWidget')EventBus.off('stepsWidget')EventBus.off('mapMarkerClick')
})

我们只需在集成页面做好事件监听即可。

五、数据保存持久化

当我们想把设计的页面 json 持久化保存,以便后续用渲染引擎渲染出来,可以在头部【保存按钮】监听事件内写自己的业务逻辑。

 //监听保存页面JSON事件EventBus.on('saveFormJson', (saveFormJson) => {console.log('监听saveFormJson', saveFormJson)})

json内容格式如下:

//传入数据,这个数据不知道什么格式,可以在设计器拖拽几个组件查看下页面JSON ,和渲染JSON一毛一样的
const remoteObj = ref({Id: '', //自定义页面IDTitle: '', //自定义页面标题Number: '', //自定义页面编号Desc: '', //自定义页面描述JsonObj: {} | '', //对象或者字符串
})

在这里插入图片描述

六、总结

通过这张介绍,我们大致就了解了界面设计引擎的基本构成和原理,后续会详细介绍每个内置组件的功能和用法,还有自定义组件如何集成。

对了,把集成页面的代码再贴出来一遍让大家再看下。

<template><!-- 页面设计器 --><formDesigner :remoteObj="remoteObj" /><!-- 页面渲染器 --><!-- <formRenderer :remoteObj="remoteObj" /> -->
</template><script setup>
//引入组件
import { formDesigner, EventBus, usePageEngineStore } from 'microi-pageengine'
//引入样式
import 'microi-pageengine/style.css'//本地组件
import { useRouter } from 'vue-router'
import { createPinia } from 'pinia'
import { onMounted, onBeforeUnmount, ref } from 'vue'//用自己的路由处理组件内部跳转,通过EventBus监听处理内部事件,主打一个自由自在,随心所欲.
const router = useRouter()//状态机传参,npm包没包把pinia打包进去,正所谓巧妇难为无米之炊,给她传一个完事
const pinia = createPinia()
const pageEngineStore = usePageEngineStore(pinia)//传入数据,这个数据不知道什么格式,可以在设计器拖拽几个组件查看下页面JSON ,和渲染JSON一毛一样的
const remoteObj = ref({Id: '', //自定义页面IDTitle: '', //自定义页面标题Number: '', //自定义页面编号Desc: '', //自定义页面描述JsonObj: {} | '', //对象或者字符串
})//模拟加载远程数据
const loadFormData = () => {}onMounted(() => {//如果需要token,设置token,该token一经接收即刻存入pinia状态机,每次调用接口通过拦截器自动处理token头,无需每次手动写,持久化用的localStorage ,可以F12查看pageEngineStore.setToken('')//下面这一大串监听,其实也可以写到一个事件里,通过key value 键值对来区分,暂时先这么着吧//监听保存页面JSON事件EventBus.on('saveFormJson', (saveFormJson) => {console.log('监听saveFormJson', saveFormJson)})//监听日历选择日期事件EventBus.on('calendarSelDate', (data) => {console.log('监听calendarSelDate', data)})//卡片更多跳转EventBus.on('cartMoreLink', (linkurl, linktype) => {console.log('监听cartMoreLink', linkurl, linktype)if (linktype == 'router') {router.push(linkurl)}})//链接组件跳转EventBus.on('linkWidget', (linkurl, linktype) => {console.log('监听linkWidget', linkurl, linktype)if (linktype == 'router') {router.push(linkurl)}})//鱼骨图跳转EventBus.on('fishWidget', (linkurl) => {console.log('监听fishWidget', linkurl)router.push(linkurl)})//步骤跳转EventBus.on('stepsWidget', (id, linkurl) => {console.log('监听stepsWidget', id, linkurl)router.push(linkurl)})//地图marker点击事件EventBus.on('mapMarkerClick', (item) => {console.log('监听mapMarkerClick', item)})
})//销毁
onBeforeUnmount(() => {EventBus.off('saveFormJson')EventBus.off('calendarSelDate')EventBus.off('cartMoreLink')EventBus.off('linkWidget')EventBus.off('fishWidget')EventBus.off('stepsWidget')EventBus.off('mapMarkerClick')
})
</script><style>
.dark {background: #252525;color: white;
}
.light {background-color: white;color: black;
}
</style>

相关文章:

Vue3 界面设计插件 microi-pageengine 入门教程一

系列文章目录 一、Vue3空项目快速集成 microi-pageengine 插件 文章目录 系列文章目录一、前言二、排版布局2.1 功能导航区2.2 组件容器区2.3 属性面板区 三、数据来源配置3.1 json数据源3.2 html数据源 四、事件穿透五、数据保存持久化六、总结 一、前言 上一篇文章介绍了 v…...

OpenCV-Contrib常用扩展模块

‌一、高频使用模块‌ ‌aruco 模块‌ ‌功能‌&#xff1a;用于生成与检测二维码&#xff08;如 ArUco Marker、AprilTag&#xff09;&#xff0c;支持增强现实&#xff08;AR&#xff09;中的物体定位与姿态估计‌。‌典型应用‌&#xff1a;AR 应用中的场景锚定、机器人导航…...

诺视Micro-LED微显示芯片量产线投产 ——开启微显示技术新时代

2025年3月19日&#xff0c;诺视科技Micro-LED微显示芯片一期量产线正式投入生产。这一具有里程碑意义的时刻&#xff0c;标志着诺视科技在Micro-LED微显示领域实现了产业化的重大突破&#xff0c;不仅为自身发展奠定了坚实基础&#xff0c;同时也为全球微显示行业带来新的活力。…...

数据库:一文掌握 Oracle 的各种指令(Oracle指令备忘)

文章目录 入门SELECT 语句SELECT INTO 语句INSERT 语句DELETE 语句UPDATE 语句 SEQUENCESCREATE SEQUENCEALTER SEQUENCE从字符串生成查询字符串操作InstrReplaceSubstrTrim DDL SQL创建表添加列修改列删除列约束类型和代码显示约束选择参照约束对表设置约束表上的唯一索引添加…...

java并发编程 juc线程类介绍

Java并发编程实战&#xff1a;深度解析CountDownLatch、CyclicBarrier与Semaphore 引言&#xff1a;线程同步的艺术 在现代多核处理器架构下&#xff0c;高效的并发编程能力已成为Java开发者的必备技能。java.util.concurrent包中的CountDownLatch、CyclicBarrier和Semaphore…...

API接口自动化学习总结

视频&#xff1a;python 做 API接口测试 和 自动化 - 1周入门_哔哩哔哩_bilibili 资料&#xff1a;HTTP协议 - 白月黑羽 要学习接口自动化&#xff0c;先要知道http协议和requests库&#xff0c;后面则是接口手工测试和接口自动化测试。 HTTP协议&#xff1a; HTTP协议简介…...

Python中的字典:深度解析与应用实践

一、字典的本质与特性 Python字典&#xff08;Dictionary&#xff09;是以**键值对&#xff08;Key-Value Pair&#xff09;**形式存储数据的无序集合&#xff0c;使用大括号{}定义。其核心特性包括&#xff1a; 快速查找&#xff1a;基于哈希表实现&#xff0c;通过键&#…...

1. 环境准备

安装CentOS 7 配置网络 默认网络是NAT 端口转发 更改/etc/sysconfig/network-scripts/ifcfg-ens33 修改以下内容&#xff1a; BOOTPROTOstatic 启用静态IP地址 ONBOOTyes 开启自动启用网络连接 添加以下内容&#xff1a; IPADDR192.168.30.100 设置IP地址 NETMASK255.25…...

【链表】一文搞定链表算法:从基础到实战

提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言例题一、两数相加二、两两交换链表中的节点三、重排链表四、合并K个升序链表五、 K个⼀组翻转链表 结语 前言 什么是链表算法&#xff1a; 链表算法&#xff0…...

瑞萨RA系列使用JLink RTT Viewer输出调试信息

引言 还在用UART调试程序么?试试JLINK的RTT Viewer吧!不需占用UART端口、低资源暂用、实时性高延时微秒级,这么好的工具还有什么理由不用了! 目录 一、JLink RTT Viewer 简介 二、软件安装 三、工程应用 3.1 SEGGER_RTT驱动包 3.2 手搓宏定义APP_PRINT 3.3 使用APP_…...

DEFI币生态重构加速,XBIT去中心化交易所引领DEX安全新范式

2025年3月18日&#xff0c;全球加密市场在监管与技术共振下迎来结构性变革。去中心化金融&#xff08;DeFi&#xff09;代币DEFI币因跨链流动性协议升级引发社区热议&#xff0c;而币应XBIT去中心化交易所&#xff08;以下简称XBIT&#xff09;凭借其链上透明验证机制、无需下载…...

高性能缓存:使用 Redis 和本地内存缓存实战示例

在现代高并发系统中&#xff0c;缓存技术是提升性能和降低数据库压力的关键手段。无论是分布式系统中的Redis缓存&#xff0c;还是本地高效的本地内存缓存&#xff0c;合理使用都能让你的应用如虎添翼。今天&#xff0c;我们将基于go-dev-frame/sponge/pkg/cache库的代码示例&a…...

Linux动态库和静态库

Linux动态库和静态库 Linux动态库和静态库动静态库的基本原理可执行程序的生成过程动静态库的本质 认识动静态库背后的库支持动静态库的命名静态链接示例 动静态库各自的特征静态库动态库 静态库的打包与使用示例文件打包1. 生成目标文件2. 打包静态库3. 组织文件使用 Makefile…...

13 IO流:字节流、字符流、缓冲流、文件复制(字节/字符/缓冲区)、字符转换流、打印流、IO框架(黑马Java视频笔记)

文章目录 IO流 >> 读写数据的方案1. 认识IO流1&#xff09;IO流的分类2&#xff09;IO流的体系 2. 文件字节输入流2.1 创建文件字节流对象2.2 读取文件1&#xff09;使用read()方法一个一个字节的读取2&#xff09;使用字节数组读取数据:byte[]3&#xff09;使用字节流读…...

深入理解 TypeScript 中的迭代器(Iterators)与生成器(Generators)

一、为什么需要迭代协议&#xff1f; 在现代 JavaScript/TypeScript 开发中&#xff0c;我们经常需要处理各种集合型数据&#xff1a;数组、Map、Set 甚至是自定义数据结构。ES6 引入的迭代协议&#xff08;Iteration Protocols&#xff09;正是为了解决统一遍历机制的问题。通…...

靶场(十四)---小白心得思路分享---Extplorer

启程&#xff1a; 开始扫描端口服务&#xff0c;发现什么都没有&#xff0c;果断进行下一步目录扫描 PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.5 (Ubuntu Linux; protocol 2.0) | ssh-hostkey: | 3072 98:4e:5d:e1:e6:97:29:6f:…...

逆向中常见的加密算法识别

1、base64及换表 base64主要是将输入的每3字节&#xff08;共24bit&#xff09;按照每六比特分成一组&#xff0c;变成4个小于64的索引值&#xff0c;然后通过一个索引表得到4个可见的字符。 索引表为一个64字节的字符串&#xff0c;如果在代码中发现引用了这个索引表“ABCDEF…...

【初学者】怎样学习、使用与研究算法?

李升伟 整理 学习、使用与研究算法是一个系统化的过程&#xff0c;涉及理论学习、实践应用和深入研究。以下从学习方法、使用技巧和研究方向三个方面进行详细阐述&#xff1a; 一、学习方法 1. 分阶段学习 初级阶段&#xff1a;掌握经典算法&#xff0c;如最短路径算法&…...

【愚公系列】《高效使用DeepSeek》018-错题本整理

🌟【技术大咖愚公搬代码:全栈专家的成长之路,你关注的宝藏博主在这里!】🌟 📣开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主! 👉 江湖人称"愚公搬代码",用七年如一日的精神深耕技术领域,以"…...

Linux上的`i2c-tools`工具集的编译构建和安装

源码复制到Ubuntu系统中并解压 的i2c-tools工具集的源码百度网盘下载链接&#xff1a; https://pan.baidu.com/s/1XNuMuT1auT1dMzYo3LAFmw?pwdi6xe 终端进入源码目录 cd /home/book/mybuild/i2c-tools-4.2执行编译构建命令 运行下面的命令进行编译构建 make CC${CROSS_COM…...

langgraph简单Demo(使用langserve实现外部调用)

前言 这个示例是研究如何使用langserve实现外部调用 接入大模型参考文章&#xff1a;接入阿里云百炼 1、安装依赖 pip install langserve fastapi uvicorn pip install sse_starlette 2、代码实现 from fastapi import FastAPI from langchain_core.messages import HumanM…...

【C#高阶编程】—单例模式详解

C# 单例模式 单例模式是一种设计模式&#xff0c;用于确保一个类只有一个实例&#xff0c;并提供一个全局访问点来访问该实例。单例模式常用于需要全局唯一对象的场景&#xff0c;比如配置文件管理、日志记录、数据库连接池等。 单例模式的核心特点 私有构造函数&#xff1a;…...

折叠树报表

折叠树报表中包含了三种信息: 1.树组织信息-可展开、收拢 2.节点的统计信息(汇总求和) 3.每个节点对应的数据信息 一、准备数据 mysql8 数据库中存在两张表 org和store表。 org表和部分数据如下,其中orgname是组织的名称,codepath是完整的组织代码,seq是每个节点的顺序,可…...

Python个人学习笔记(16):模块(os)

四、os模块 主要用于文件夹处理 &#xff08;一&#xff09;文件夹相关 os.makedirs(‘dirname1/dirname2’) &#xff1a;创建文件夹目录&#xff0c;不能重复创建&#xff0c;用的多 代码&#xff1a; os.makedirs(a/b/c)结果&#xff1a; os.removedirs(‘dirname1’)&…...

虚拟地址空间(下)进程地址空间(上)

一.关于页表组成 1.权限&#xff08;rwx) 作用&#xff1a;如1.让代码区变成只读的 2.写时拷贝的实现&#xff1a;子进程创建时其页表指向的父进程代码和数据权限都是只读的&#xff0c;子进程试图修改&#xff0c;触发错误&#xff0c;系统开始写时拷贝。 来源&#xff1a;…...

【数据集分享】青藏高原两次强震玛多地震和漾濞地震的震源过程

2021年5月21日&#xff0c;5小时内在青藏高原不同区域发生了漾濞6.4级和玛多7.4级强烈地震&#xff0c;表明印度板块和欧亚大陆板块的碰撞汇聚作用下青藏高原持续和频繁的 剧烈构造运动和地震活动。本研究利用地震记录和空间对地观测同震位移资料&#xff08;InSAR&#xff09;…...

jmeter环境搭建及使用

Meter 是一个开源的性能测试工具&#xff0c;用于测试静态和动态资源的性能。 1、安装 官网下载&#xff1a; 下载地址&#xff1a;Apache JMeter - Download Apache JMeter 网盘下载&#xff1a; 通过百度网盘分享的文件&#xff1a;apache-jmeter-5.6.3.rar 链接&#x…...

Python 鼠标轨迹算法 - 防止游戏检测

一.简介 鼠标轨迹算法是一种模拟人类鼠标操作的程序&#xff0c;它能够模拟出自然而真实的鼠标移动路径。 鼠标轨迹算法的底层实现采用C/C语言&#xff0c;原因在于C/C提供了高性能的执行能力和直接访问操作系统底层资源的能力。 鼠标轨迹算法具有以下优势&#xff1a; 模拟…...

网络编程--服务器双客户端聊天

写一个服务器和客户端 运行服务器和2个客户端&#xff0c;实现聊天功能 客户端1和客户端2进行聊天&#xff0c;客户端1将聊天数据发送给服务器&#xff0c;服务器将聊天数据转发给客户端2 要求&#xff1a; 服务器使用 select 模型实现 &#xff0c;客户端1使用 poll 模型实现…...

yum软件包乾坤大挪移(Yum Package Qiankun Great Migration)

yum软件包乾坤大挪移 背景 由于很多的生产环境是无法连接外网的&#xff0c;因此用yum或者dnf命令来安装软件包常常是一个比较麻烦的事情&#xff0c;原因是很多软件的依赖很复杂&#xff0c;如果要一个个下载、拷贝、再安装&#xff0c;这往往是一个非常繁琐冗杂的过程&…...