从零实现一套低代码(保姆级教程)【运行时】 --- 【29】实现设计态的预览按钮和全屏展示

摘要

目前这个低代码平台的整体,我们已经搭建好了。后续可能就是一些额外功能的补充。现在我们看这个平台会发现一个比较明显的问题:

就是在运行时,能展示组件的地方只有中间的画布区。因为在设计态的时候,我们就已经缩小了放置组件的范围,有三个地方我们是不能拖拽组件的。顶部栏,左侧组件区域,右侧面板区域。

为了能够让这三个区域放置组件,我们希望能够将其隐藏,并且通过某种方式再让它显示出来。当然这里博主只是提供了一个产品思路,如果读者有其他的实现方式,可以自行尝试,这里没有什么必须要以什么方式去实现。

1.实现预览按钮

在设计态,我们设计好页面后,总是需要保存后,到主页面里进行预览。所以我们在设计态也做一个预览按钮,方便我们去操作。

OK,来到designTop组件,我们在保存按钮的旁边添加一个预览按钮。

      <Button onClick={reviewPage} type='primary' ghost>预览</Button>

预览的事件,就是到render的路由下展示即可。

  const reviewPage = () => {
    const search = window.location.search || '';
    const pageId = search.replace('?pageId=', '');
    window.open(`http://localhost:3000/render?pageId=${pageId}`)
  }

但是这样做完你会发现一个问题,就是当你在设计态做了一些操作之后,点击预览按钮,是没有效果的。页面还是长之前的样子。

这是因为,在预览的页面里也是通过请求接口获取pageJson来进行页面展示的,所以在预览之前应该要先进行保存。

所以预览的事件里,我们先进行保存逻辑的处理,同时我们修改一下预览这个词,变成保存并预览。

  const reviewPage = () => {
    const search = window.location.search || '';
    const pageId = search.replace('?pageId=', '');
    const comList = Store.getState().comList;
    axios.post('http://localhost:4000/page-json/updatePage', {
      pageId,
      pageJson: comList
    })
    .then(res => {
      if(res.data.code == 200) {
        window.open(`http://localhost:3000/render?pageId=${pageId}`)
      }
    })
  }

  <Button onClick={reviewPage} type='primary' ghost>保存并预览</Button>

2.控制顶部栏的显示和隐藏

现在,我们需要一个按钮来控制顶部栏的隐藏,这里我们也在顶部栏的下方添加一个按钮。

      <div onClick={hideDesignTop} className='icon'>
        <ArrowUpOutlined/>
      </div>
  .icon {
    font-size: 20px;
    float: right;
    color: rgb(0, 26, 255);
    margin-top: 50px;
    margin-right: 60px;
    cursor: pointer;
    width: 40px;
    height: 40px;
    text-align: center;
    line-height: 40px;
    border-radius: 20px;
    box-shadow: 0 10px 10px 0px rgb(213, 213, 223);
  }

这个按钮的点击事件,就是将顶部栏进行隐藏,所以我们需要一个变量去控制顶部栏的显示状态。

  const [visible, setVisible] = useState(true)
  
  const hideDesignTop = () => {
    setVisible(false);
  }

在这里插入图片描述

这样当我们点击这个按钮之后,顶部栏就会消失了。

那有一个问题,消失了之后我怎么让它变回来呢?我还需要保存的功能啊,这里我们监听键盘的keydown事件,并且给一个提示。当我按下w键时,将顶部栏恢复。

  useEffect(() => {
    const keydownFun = (e) => {
      if(e.key === 'w') {
        setVisible(true)
      }
    }
    document.addEventListener('keydown', keydownFun);

    return () => {
      document.removeEventListener('keydown', keydownFun)
    }
  }, [])
  
  const hideDesignTop = () => {
    setVisible(false);
    message.info('键盘W按钮按下,恢复顶部栏')
  }

Ok,这样我们就可以控制顶部栏的显示和隐藏了,隐藏之后我们可以在空出的位置进行拖拽组件。

之后,以同样的方式去控制左侧组件和右侧面板的显示和隐藏,这里就不再粘贴代码了。

这部分代码提交在github上
https://github.com/TeacherXin/XinBuilder
commit: fix: 第二十四节:实现设计态的预览按钮和全屏展示

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

spring boot3多模块项目工程搭建-下(团队开发模板)

⛰️个人主页: 蒾酒 &#x1f525;系列专栏&#xff1a;《spring boot实战》 目录 写在前面 上文衔接 Common模块 DAO模块 Service模块 Web模块 API模块 写在最后 写在前面 本文介绍了springboot开发后端服务&#xff0c;多模块项目工程搭建&#xff0c;各模块的…

创建存储过程

查询语句 DDL CREATE TABLE student (id INT PRIMARY KEY AUTO_INCREMENT,createDate DATE NOT NULL,phone VARCHAR(20) NOT NULL,age INT NOT NULL,sex ENUM(男, 女) NOT NULL,introduce TEXT NOT NULL,userName VARCHAR(50) NOT NULL ); DML INSERT INTO student (create…

ERROR: tensorboard 1.14.0 has requirement setuptools>=41.0.0(问题解决)

问题描述&#xff1a; ERROR: tensorboard 1.14.0 has requirement setuptools>41.0.0, but youll have setuptools 39.2.0 which is incompatible. 问题原因&#xff1a; setuptools 版本太低 解决方法&#xff1a;升级setuptools版本 pip install --upgrade setuptools…

Java modbus 实现RTU串口作为slave(服务端)读写数据

这里要了解下modbus的RTU和TCP 的几个名称关系&#xff1a; Modbus/RTU&#xff1a;主站 和从站 关系 Modbus/TCP&#xff1a;客户端和服务端关系 关系 主站主动找从站读写数据 客户端主动找服务端读写数据 所以当使用Modbus/TCP时&#xff0c;主站一般作为客户端&#xff…

【观成科技】加密C2框架Xiebro流量分析

一、工具介绍 Xiebro是由Golang和 .NET编写&#xff0c;提供支持的多人和多服务器 C2/后开发框架。它支持多种通信协议&#xff0c;包括TCP、websocket等&#xff0c;并且在客户端与Xiebro服务器之间的通信通常采用AES加密来保障安全性和隐蔽性。 二、工具原理分析 Xiebro C…

Sectigo SSL证书申请的流程是怎样的?

在当今数字化时代&#xff0c;网络安全成为了一个不可忽视的问题。为了保护网站和用户数据的安全&#xff0c;SSL证书成为了网站运营的重要组成部分。Sectigo作为全球领先的数字证书颁发机构之一&#xff0c;提供了一系列的证书解决方案来满足不同类型网站的需求。以下是对Sect…

一体化水处理设备有哪些

一体化水处理设备是一种集成了多种水处理工艺的紧凑型设备&#xff0c;适用于各种规模的水处理需求&#xff0c;包括生活污水、工业废水、饮用水处理等。这些设备通常设计为模块化&#xff0c;便于安装、运输和扩展。以下是一些常见的一体化水处理设备类型&#xff1a; 一体化生…

针对大型企业网站和内部网的框架/内容管理系统建议

1. 问题背景 在大型企业中&#xff0c;网站和内部网的建设至关重要&#xff0c;但企业在选择框架/内容管理系统&#xff08;CMS&#xff09;时往往面临诸多难题。这些难题包括&#xff1a; 稳定性和可靠性&#xff1a; 企业网站和内部网需要稳定可靠&#xff0c;以确保业务的…

【热门话题】Vue.js:现代前端开发的轻量级框架之旅

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 Vue.js&#xff1a;现代前端开发的轻量级框架之旅一、Vue.js概览1.1 Vue.js的诞…

数据中心逆变电源的功率容量计算方法

随着信息技术的快速发展&#xff0c;数据中心在现代社会中的地位日益凸显&#xff0c;各种企业和机构对数据中心的依赖程度也越来越高。而电源作为数据中心的核心基础设施&#xff0c;其可靠性和高效性直接影响着数据中心的稳定运行。因此&#xff0c;如何设计一款性能优越、可…

以管理员身份运行设置

在使用非 Administrator 用户操作情况下&#xff1a; 举个例子&#xff0c;因为每次想要以管理员身份运行命令提示符&#xff0c;都要右键选择才行&#xff0c;有点麻烦。 可以设置每次点开就是以管理员身份运行命令提示符&#xff0c;操作如下&#xff1a; 1.Win R 输入 s…

知了汇智副总经理赵懋骏出席“走进阿里”CEO联席会,共话AI大模型新趋势

在智能科技日新月异的今天&#xff0c;汇智知了堂副总经理赵懋骏于3月28日受邀出席了在天府软件园举行的“走进阿里–2024年CEO联席会”&#xff0c;会议聚焦阿里云AI技术的最新进展与行业应用&#xff0c;特别是“AI技术正在加速变革&#xff1a;大模型的历史、现在与趋势”&a…

批量剪辑与转码解析:一键实现MP4到FLV顺畅转换的技巧

在数字化多媒体日益盛行的今天&#xff0c;视频格式转换成为了我们日常生活和工作中不可或缺的一部分。尤其是当需要将MP4格式的视频转换为FLV格式时&#xff0c;批量剪辑与转码功能的出现&#xff0c;极大地提升了我们处理视频的效率。本文将为您详细解析云炫AI智剪如何一键实…

apisix3.9.1 和 dashboard 离线安装

服务器配置 centos7 linux x86 64 前置 需要将离线安装包上传到服务器上 {上传目录 /root/apisix-soft/ } 【建议:优先上传etcd-*.jar \ apisix-*.rpm \ cyrus-*.rpm \ openldap-*.rpm 等安装好apisix后再上传apisix-dashboard-*.rpm】 可以自行网上寻找&#xff0c;或找一台可…

spring cloud alibaba、spring cloud和springboot三者的版本兼容

官方版本说明地址: 版本说明 alibaba/spring-cloud-alibaba Wiki GitHub 组件版本关系 每个 Spring Cloud Alibaba 版本及其自身所适配的各组件对应版本如下表所示(注意,Spring Cloud Dubbo 从 2021.0.1.0 起已被移除出主干,不再随主干演进): Spring Cloud Alibaba Ve…

初识java——javaSE(4)类与对象

文章目录 前言一 类与对象1.1 面向过程与面向对象思想的区别&#xff1a;1.2 类的定义1.3 类的实例化——对象通过创建对象&#xff0c;调用对象中的成员变量与方法 1.4 this关键字this的作用一&#xff1a;this 的作用二构造方法&#xff1a;对象创建的两步方法的重载 this的作…

SGPM02陀螺仪模块通过惯性导航助力AGV小车的发展

之前我们介绍过SGPM01系列陀螺仪模块在智能泳池清洁机器人导航的方案(SGPM01)。这款惯性导航模块收到了许多企业的欢迎。由此&#xff0c;爱普生推出了SGPM02系列陀螺仪模块通过惯性导航&#xff0c;助力AGV小车的发展。 AGV是一种用于运输材料的无人驾驶车辆&#xff0c;并且A…

SHAP分析交互作用的功能,如果你用的模型是xgboost

SHAP分析交互作用的功能&#xff0c;如果你用的模型是xgboost 如果在SHAP分析中使用的是xgoost模型&#xff0c;就可以使用SHAP分析内置的交互作用分析&#xff0c;为分析变量间的相互提供了另外一个观察的视角。关于SHAP交互作用分析&#xff0c;一个参考资料&#xff0c;还是…

word2019 64位 NoteExpress突然无法使用解决方法

之前用的好好的&#xff0c;去除格式化运行过一次。 打开别的文档&#xff0c;突然发现红框中的图标全变灰了 根据教程添加 加载项&#xff0c;然后word以管理员身份重启&#xff0c;NE也以管理员身份运行&#xff0c;又可以了 然后突然又不行了&#xff0c;重启电脑后NE变成…