Vue进阶之Vue无代码可视化项目(六)

Vue无代码可视化项目

  • 渲染引擎(渲染器)
    • 初版
      • TextBlock.vue
      • ChartBlock.vue
      • ImageBlock.vue
      • LayoutView.vue
    • 渲染器
      • BlockRenderer.vue
      • LayoutView.vue
    • 进一步
      • types
        • types/block.ts
        • mock/blocks.ts
        • stores/editor.ts
        • blocks/BlockRenderer.vue
        • views/LayoutView.vue
        • blocks/internal/FallbackBlock.vue
  • 小结
    • components/AppNavigator.vue

渲染引擎(渲染器)

接下来要做的是,中间区域Block相关的内容,block相关的内容最重要的就是,数据协议设计和整体渲染器的逻辑

  1. 渲染器概念:简单点说就是,封装他的组件。比如做了一个图表,可以说封装了一个图表组件,如果做了一个表单校验,可以说做了一个表单校验组件,或者写了一些业务组件,但是这些点要是上升一点,就是,表单渲染 – 表单渲染器,表单渲染组件,表单规则约定 – 表单规则校验器;可以美化这些词语,提高简历

  2. 数据协议:左边物料区有很多的物料列表,将左边的物料拖到中间编排区进行编排,拖拽之后,这些内容区域就能组装成一个页面,那么从左边拖的时候,这些物料需要定义一个数据结构,这个数据结构就叫做数据协议,我们从左边拖过来的时候,需要将对应的数据加到右边页面中去,加进去的时候,我们的页面相当于又是一个大JSON,这是属于页面的协议,左边物料是物料协议。

  3. 物料渲染:我们有很多很多的物料,这些物料都要取通过条件规则判断来渲染,如果来的物料是文本,那么就按照文本的方式去渲染,如果来的物料是视频,那么就按照视频播放器的逻辑去渲染,如果来的物料是图表,就按照图表的渲染器去渲染,以此类推。

初版

创建物料blocks文件夹

  • src
    • blocks
      • external
      • internal
        • TextBlock.vue
        • ImageBlock.vue
        • ChartBlock.vue

blocks:可以分内部block(基础block)和外部block,就是最后代码结构内容和block整体渲染逻辑中,是可以加载外部block内容的,比如将有些block单独封装好之后,上传到远程,这时候远程能拉取到对应的js代码,通过umd打包后放上去,然后在使用的地方加载过来,植入到我们代码中。

TextBlock.vue

<!-- 共同去处理、规范约定他们 --><!-- Text/Image/Chart --><template><div>{{text.content}}</div>
</template><script setup lang='ts'>
const text={type:"text",content:"这是一段文本"
}
</script><style scoped></style>

ChartBlock.vue

<!-- 共同去处理、规范约定他们 --><!-- Text/Image/Chart --><template><div>{{chart.type}}</div></template><script setup lang='ts'>const chart={type:"chart",content:"这是一段文本",props:{xAxis:['Mon','Tue','Wed','Thu','Fri','Sat','Sun'],yAxis:[820,930,901,934,1290,1330,1320]}}</script><style scoped></style>

ImageBlock.vue

<!-- 共同去处理、规范约定他们 --><!-- Text/Image/Chart --><template><div><img :src="image.props.src" :alt="image.props.alt" /></div></template><script setup lang='ts'>const image={type:"image",content:"image",props:{src:"https://cdnjs.cloudflare.com/ajax/libs/twemoji/11.3.0/2/svg/1f469-200d-1f692.svg",alt:"这是一个图片",}}</script><style scoped></style>

LayoutView.vue

<SmoothDndDraggable><TextBlock/>
</SmoothDndDraggable>
<SmoothDndDraggable><ImageBlock/>
</SmoothDndDraggable>
<SmoothDndDraggable><ChartBlock/>
</SmoothDndDraggable>
import TextBlock from '@/blocks/internal/TextBlock.vue'
import ImageBlock from '@/blocks/internal/ImageBlock.vue'
import ChartBlock from '@/blocks/internal/ChartBlock.vue'

全部代码:

<template><div class="layout-wrapper" :class="{debug}" @click="debugStore.toggleDebug"><LeftPanel /><div><SmoothDndContainer class="block-group" orientation="vertical"tag="div"  group-name="blocks" @drop="(payload)=>{console.log('payload',payload);const newBlocks=applyDrag(blocks,payload)editorStore.updateBlocks(newBlocks)}"  ><!-- <SmoothDndDraggable v-for="block in blocks" :key="block"><div class="block-item">{{block}}</div></SmoothDndDraggable> --><SmoothDndDraggable><TextBlock/></SmoothDndDraggable><SmoothDndDraggable><ImageBlock/></SmoothDndDraggable><SmoothDndDraggable><ChartBlock/></SmoothDndDraggable></SmoothDndContainer></div><div></div>
</div>
</template><script lang="ts" setup>
// import AppLeftPanel from '@/components/AppLeftPanel/AppLeftPanel';
import LeftPanel from '@/components/LeftPanel.vue';
import {useDebugStore} from '@/stores/debug'
import {useEditorStore} from '@/stores/editor'
import {SmoothDndContainer} from '@/components/SmoothDnd/SmoothDndContainer'
import {SmoothDndDraggable} from '@/components/SmoothDnd/SmoothDndDraggable'
import TextBlock from '@/blocks/internal/TextBlock.vue'
import ImageBlock from '@/blocks/internal/ImageBlock.vue'
import ChartBlock from '@/blocks/internal/ChartBlock.vue'
import { storeToRefs } from 'pinia';
import type { DropResult } from 'smooth-dnd';
import {arrayMove} from '@/utils/array';const debugStore = useDebugStore()
const editorStore = useEditorStore()const {debug}=storeToRefs(debugStore)
const {blocks}=storeToRefs(editorStore)const applyDrag=<T extends any[]>(arr:T,dragResult:DropResult)=>{const {addedIndex,removedIndex,payload}=dragResultconst result = [...arr]if(addedIndex===null) return result;// 添加:从外面拖进来是添加if(addedIndex!==null&&removedIndex===null){result.splice(addedIndex,0,payload)}// 移动:内部拖拽是移动if(addedIndex!==null&&removedIndex!==null){return arrayMove(result,removedIndex,addedIndex)}return result
}</script>
<style>

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

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

相关文章

Ubuntu 20 安装 uwsgi 失败解决办法

环境&#xff1a;Ubuntu 20.04 LTS Python 版本&#xff1a;python3.8.10 虚拟环境路径&#xff1a;/home/venv 激活虚拟环境后&#xff0c;安装 uswgi pip install uwsgi报错如下&#xff1a; ERROR: Command errored out with exit status 1:command: /home/venv/bin/pytho…

如何建设和维护数据仓库:深入指南

欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;欢迎订阅相关专栏&#xff1a; V: LAF20151116 进行更多交流学习 ⭐️ 全网最全IT互联网公司面试宝典&#xff1a;收集整理全网各大IT互联网公司技术、项目、HR面试真题. ⭐️ AIGC时代的创新与未来&#xff…

js数组与字符串方法

拼接方法 字符串拼接用 就行了&#xff0c;如 str1 str2。数组则用 join() 方法把元素连起来&#xff0c;比如 arr.join(‘,’)。数组不能直接用 拼接&#xff0c;但两个数组相加会被转成字符串再拼接&#xff0c;这不是数组的拼接&#xff0c;而是字符串拼接行为。 let s…

Chapter12 屏幕后处理效果——Shader入门精要学习笔记

Chapter12 屏幕后处理效果 一、屏幕后处理概述以及基本脚本系统1.OnRenderImage 函数 —— 获取屏幕图像2.Graphics.Blit 函数 —— 使用特定的Shader处理3.在Unity中实现屏幕后处理的基本流程4.屏幕后处理基类 二、调整亮度、饱和度和对比度1.BrightnessSaturationAndContrast…

GESP CCF C++ 三级认证真题 2024年6月

第 1 题 小杨父母带他到某培训机构给他报名参加CCF组织的GESP认证考试的第1级&#xff0c;那他可以选择的认证语言有&#xff08;&#xff09;种。 A. 1 B. 2 C. 3 D. 4 第 2 题 下面流程图在yr输入2024时&#xff0c;可以判定yr代表闰年&#xff0c;并输出 2月是29天 &#x…

深度学习,人工智能

人工智能&#xff0c;代跑通&#xff0c;预测模型&#xff0c;模型优化&#xff0c;增加模块&#xff0c;文章复现&#xff0c;python代做&#xff0c;预测&#xff0c;微调&#xff0c;融合&#xff0c;深度学习&#xff0c;机器学习程序代写&#xff0c;环境调试&#xff0c;…

20240718 每日AI必读资讯

大模型集体失智&#xff01;9.11和9.9哪个大&#xff0c;几乎全翻车了 - AI处理常识性问题能力受限&#xff0c;9.11&#xff1e;9.8数学难题暴露了AI短板。 - 训练数据偏差、浮点精度问题和上下文理解不足是AI在数值比较任务上可能遇到的困难。 - 改进AI需优化训练数据、Pr…

Tailwind CSS指南

使用和配置 Tailwind CSS 的完整指南 Tailwind CSS 是一个功能类优先的 CSS 框架&#xff0c;允许你快速构建现代的网站。它提供了一组预定义的实用工具类&#xff0c;可以直接在 HTML 中使用&#xff0c;以实现各种样式效果。本文将详细讲解如何使用和配置 Tailwind CSS&…

spark的相关知识点

2024.6.19 1.scala&#xff1a;语言 2.spark&#xff1a;框架&#xff08;jar包&#xff09; 3.spark streaming&#xff1a;kafka 4.spark mlib&#xff1a;机器学习 算法 5.解释 Class&#xff1a;类Case Class&#xff1a;样例类Object&#xff1a;对象User&#xff1a;类Ne…

阿里云国际站:海外视频安全的DRM加密

随着科技的进步&#xff0c;视频以直播或录播的形式陆续开展海外市场&#xff0c;从而也衍生出内容安全的问题&#xff0c;阿里云在这方面提供了完善的内容安全保护机制&#xff0c;适用于不同的场景&#xff0c;如在视频安全提供DRM加密。 由图可以了解到阿里云保护直播安全的…

Electron 应用关闭突出程序坞

在Electron应用中,处理窗口关闭并使其最小化到Mac系统的程序坞(Dock)而不是完全退出应用,通常涉及到监听窗口的关闭事件(close事件)并在适当时机阻止其默认行为。以下是一些步骤和关键点,帮助实现这一功能: 1. 监听窗口关闭事件 在Electron的主进程(main process)中…

请求通过Spring Cloud Gateway 503

最近想处理一个通用的网关服务。 但是我在处理好所有配置的时候发现&#xff0c;网络请求过网关的时候&#xff0c;一直503&#xff0c;我所有的配置都没问题。 环境&#xff1a; JDK&#xff1a; 17 Spring Cloud: 2023.0.2 在 Spring Cloud Gateway 的早期版本中&#xff…

如何应用CDP做好客户标签管理?

​标签是对客户的特征标识&#xff0c;是经过人为再加工后的结果&#xff0c;相对于传统意义的标签&#xff0c;CDP客户数据平台更侧重于客户动态的行为&#xff0c;标签的加工随着用户行为的变化实时更新&#xff0c;帮助客户捕捉用户每个阶段的动态特征与需求。 如何应用CDP做…

【ROS】的软件包应用商店使用-以小乌龟为例

文章目录 环境效果图介绍安装使用总结 环境 在Ubuntu20.04系统下运行 效果图 介绍 ros应用商店&#xff0c;里面有大量ros可使用的软件。 下面以ros经典的控制小乌龟为例。 安装 安装控制器 sudo apt install ros-noetic-rqt-robot-steering安装小乌龟 sudo apt insta…

Spring中事务是如何实现的?

在Spring中&#xff0c;事务管理是通过AOP&#xff08;面向切面编程&#xff09;和代理模式实现的。Spring提供了声明式事务管理&#xff0c;允许开发者通过简单的配置来管理事务&#xff0c;而不需要手动编写事务管理的代码。 概述&#xff1a; 1.Spring事务底层是基于数据库事…

微软GraphRAG +本地模型+Gradio 简单测试笔记

安装 pip install graphragmkdir -p ./ragtest/input#将文档拷贝至 ./ragtest/input/ 下python -m graphrag.index --init --root ./ragtest修改settings.yaml encoding_model: cl100k_base skip_workflows: [] llm:api_key: ${GRAPHRAG_API_KEY}type: openai_chat # or azu…

uniapp踩坑之项目:uni-table垂直居中和水平居中

uni-table 中的水平居中uni-td align"center"&#xff0c;css里的属性vertical-align: middle //html 水平居中<uni-table ref"table" :loading"loading" border stripe emptyText"暂无更多数据"><uni-tr><uni-th :wid…

[HDCTF2019]MFC

[HDCTF2019]MFC-CSDN博客 不会写 完全画瓢 我还以为win32什么系统逆向 原来是小瘪三! VM保护 下载xspy(看雪上有) 打开32位的 再打开 这个窗口 把这个放大镜托到这个大窗口(里面有个小窗口,不要托错了) 下面这个 onmeg 就她不正常,是什么0464 #include <stdio.h&g…

mac环境下安装python3的图文教程

Python 是一种功能多样且强大的编程语言&#xff0c;在各个领域得到广泛应用。许多 Mac 用户都在其设备上安装和运行 Python&#xff0c;以运行特定的应用程序或创建、运行自己的 Python 脚本。 文章源自设计学徒自学网-http://www.sx1c.com/49441.html 虽然某些版本的 macOS…

GO——GMP 好文整理

GMP相关好文推荐&#xff1a; Golang 调度器设计思想、GMP 协程调度模型详解 Golang的协程调度器原理及GMP设计思想 Golang调度器GMP原理与调度全分析