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

Vue无代码可视化项目—补充内容

  • 背景介绍、方案设计
  • Canvas Table
    • 创建一个新的vue项目
    • 普通表格的效果
    • Canvas上手
    • Canvas画表格-画基本表格
    • CanvasTable处理事件系统
    • CanvasTable表格滚动
  • Vue组件封装思想
    • 拖拽组件 —smooth-dnd
      • DndDemo1.vue
      • DndContainer.js
    • CanvasTable封装
      • CanvasTable.js

背景介绍、方案设计

  1. 总结项目经验、业务价值
    平常写代码内容、能力都是具备的,但是很多没有将代码背后的经验、业务背后的内容没有总结下来,
  2. 公司中低代码项目难度较高,一般不会参与,因此这个无代码可视化项目为了让大家练手,有一个体系架构
  3. 项目核心:数据源管理与加工、页面组装、流程引擎、低代码编辑器
  4. 要有复用、封装的思想
    写好的轮子要后面的人更轻松的使用。所以要时时刻刻有组件封装和开源的意识,每天只在做代码,写代码都没有成长呢,是因为没有思考,没有思考怎么让代码更完善,让代码更好。哪怕是一个简单的登录注册,里面都有很多可优化的点。
  • 表单
    • 校验
    • 密码加密
    • 验证码

登录注册真这么简单吗?

  • 微信校验(authing、auth2) 做第三方鉴权的
  • 项目发展到一定体量之后,会有单独的用户中心,专门做登录、鉴权等处理的
  1. 框架的选型
  2. 只要涉及到拖拽,会下意识的反应是drag事件,但其实经过我们实践,drag事件有很多浏览器受限的时候,因此,我们选择使用的是基于move事件封装vue draggable
  3. 自由拖拽,在做的低代码平台不考虑分辨率的兼容,就可以用这种方案。但是如果要考虑分辨率的兼容,这种方式是不太好处理的。因此,在之后做架构设计的时候,要考虑他背后的本质逻辑是什么,而不是停留在技术本身,要对每一项技术说出优劣势,能说出各个技术栈,各个技术点,各个框架库他的用武之地是什么,这样才算一个优秀的架构师,放在平常的时候,一定要刻意练习才行。
  4. 低代码平台参考借鉴的是国外的平台:Glide
  5. 发布之后的操作是什么?
    一般无代码平台都不涉及到私有化部署,所以都是基于公有云部署,这样所有的用户都使用我们这一套代码,这样就不会牵扯按量计费的逻辑
    国内涉及到的部署,牵扯到两个问题,主机ECS证书、域名,主机用的是本公司的服务器,但是,在域名和证书的时候,很多用户想要的是自定义域名,自定义域名涉及到域名的备案和域名证书的申请,域名备案跟随的是自己的公司主体,证书问题可以使用Caddy,可以自动的分发https,一般都会借助docker caddy

Canvas Table

针对普通的table,数据量特别大的时候,要怎么做呢?

  1. 需求:加分页、滚动加载
  2. 虚拟表格(列表) vue-virtual-scroller
  3. canvas table,因为画布性能好,他的性能瓶颈取决于你的绘图算法

创建一个新的vue项目

pnpm create vue@latest

请添加图片描述

cd vue-canvas-table
pnpm i
pnpm format
pnpm dev

请添加图片描述

普通表格的效果

<template><div><!-- 简单表格的渲染 --><table><thead><tr><th v-for="column in data.columns" :key="column.key">{{column.title}}</th></tr></thead><tbody><tr v-for="record in data.dataSource" :key="record.key"><td v-for="column in data.columns" :key="column.key">{{ record[column.key] }}</td></tr></tbody></table></div>
</template><script setup>
// 确认表格的数据
const data = {columns:[{title: '姓名',key: 'name',width: 100},{title: '年龄',key: 'age',width: 100}],dataSource: Array.from({length: 100000}).map((item,index)=>({key:index,name:`name-${index}`,age: Math.floor(Math.random() * 100)}))
}
</script><style scoped>
table{border-collapse: collapse;
}
td{border: 1px solid #ccc;width: 100px;
}
</style>

请添加图片描述

Canvas上手

<template><div><!-- 当window.devicePixelRatio为2的时候 --><!-- <canvas ref="canvas" width="1600" height="1200">对不起,您的浏览器不支持</canvas> --><canvas ref="canvas" width="800" height="600">对不起,您的浏览器不支持</canvas></div>
</template><script setup>
// 为了获取到canvas dom
import {ref,onMounted} from 'vue'// 获取canvas dom引用
// 注意一定不要用dom操作
// const canvas = document.querySelector("#canvas")//ts写法:
// const canvas = ref<HTMLCanvasElement|null>(null)
// 这里直接
const canvas = ref(null)onMounted(() => {// 1.获取canvas dom// 2.获取绘制上下文const ctx=canvas.value.getContext('2d')  //还可以是webgl(这里参考three.js)// 画笔的概念// 假设你现在在用毛笔练书法// 按下去ctx.beginPath()// 开始写字ctx.moveTo(0,0)// ctx.lineTo(200,200)   //当window.devicePixelRatio为2的时候ctx.lineTo(100,100)// 设置画笔// fill 填充 // stroke 描边ctx.strokeStyle='red'// 画文字ctx.font="48px serif"ctx.fillText("Hello world",100,200)  //content,x,yctx.stroke()// canvas是位图,需要处理缩放的问题,很多图表或图画,渲染后会模糊,因此一般都是*2或*3这样// svg是矢量图// 怎么获取浏览器设备的像素比// console.log(window.devicePixelRatio); // 回锋收笔ctx.closePath()});
</script><style scoped>
canvas{background-color: #eee;width: 800px;   /* 这个是正常宽度 */height: 600px;  /* 这个是正常高度 */
}
</style>

请添加图片描述

Canvas画表格-画基本表格

<template><div><!-- 当window.devicePixelRatio为2的时候 --><!-- <canvas ref="canvas" width="1600" height="1200">对不起,您的浏览器不支持</canvas> --><canvas ref="canvas" width="800" height="600">对不起,您的浏览器不支持</canvas></div>
</template><script setup>
// 为了获取到canvas dom
import {ref,onMounted} from 'vue'// 获取canvas dom引用
// 注意一定不要用dom操作
// const canvas = document.querySelector("#canvas")//ts写法:
// const canvas = ref<HTMLCanvasElement|null>(null)
// 这里直接
const canvas = ref(null)const data = {columns:[{title: '姓名',key: 'name',width: 100},{title: '年龄',key: 'age',width: 100}],dataSource: Array.from({length: 10}).map((item,index)=>({key:index,name:`name-${index}`,age: Math.floor(Math.random() * 100)}))
}onMounted(() => {const ctx=canvas.value.getContext('2d')  //还可以是webgl(这里参考three.js)const {columns,dataSource}=dataconst pixelRatio=window.devicePixelRatioconst cellWidth = 100 * pixelRatioconst cellHeight = 

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

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

相关文章

运维工作中的事件、故障排查处理思路

一、运维工作中的事件 https://www.51cto.com/article/687753.html 二、运维故障排查 一&#xff09;故障排查步骤 1、明确故障 故障现象的直接表现故障发生的时间、频率故障发生影响哪些系统故障发生是否有明确的触发条件   故障举例&#xff1a;无法通过ssh登录系统 影响…

nginx 离线版本升级-停机

1. 最新版本下载 地址&#xff1a;https://nginx.org/en/download.html 2. 查看当前安装信息&#xff1a; which nginx (我获取的地址为/usr/local/nginx&#xff0c;之后用nginx-path代替) 2. 备份nginx执行文件 cp nginx-path/sbin/nginx nginx-path/sbin/nginx.bak …

redis的性能管理、主从复制和哨兵模式

redis的性能管理、主从复制和哨兵模式 一、redis的性能管理 redis的数据时缓存在内存中的 查看系统内存情况 info memory used_memory:853688 redis中数据占用的内存 used_memory_rss:10522624 redis向操作系统申请的内存 used_memory_peak:853688 redis使用内存的峰值 …

你看不上的“垃圾”——别人的赚钱“利器”

首先说一点&#xff0c;你认为是常识性的东西&#xff0c;也许还有4亿中国人不知道。 其次&#xff0c;你认为是遍地都有的、你看不上的、你瞧不起的这些“破烂玩意”&#xff0c;别人也许正拿来赚钱&#xff01; 不可思议吧&#xff0c;事实就是如此。 我在老家&#xff0c;…

word打印---doc转html后进行打印,window.print、print-js、vue-print-nb

提示&#xff1a;word预览方式—插件 文章目录 [TOC](文章目录) 前言一、vue-office-docx把docx转换html二、调取window.print三、print-js四、vue-print-nb总结 前言 word预览 一、vue-office-docx把docx转换html npm install vue-office-docx -S-DofficeDocx.vue <templ…

Python爬虫知识体系-----Selenium

数据科学、数据分析、人工智能必备知识汇总-----Python爬虫-----持续更新&#xff1a;https://blog.csdn.net/grd_java/article/details/140574349 文章目录 一、安装和基本使用二、元素定位三、访问元素信息四、自动化交互五、PhantomJS六、Chrome headless 一、安装和基本使用…

html+css 实现左平移背景按钮

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享htmlcss 绚丽效果&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 文…

计网面试题

OSI七层模型 物理层&#xff0c;数据链路层&#xff0c;网络层&#xff0c;传输层&#xff0c;会话层&#xff0c;表示层&#xff0c;应用层 应用层&#xff08;Application Layer&#xff09;&#xff1a;这是网络体系结构中的最顶层&#xff0c;提供用户接口和应用程序之间的…

Mosh|SQL教程第六弹

一、视图 1、创建视图CREATE VIEW viewname AS 这样就可以在左侧导航栏看到新增的view了&#xff0c;如果没有的话刷新一下就好了 可以把视图当表格使用 或者 注意&#xff1a;视图不存储数据&#xff0c;数据存储在表中 练习&#xff1a;创建一个视图&#xff0c;叫做客户结…

常用传感器讲解十五--触摸传感器(KY-036)

常用传感器讲解十五–触摸传感器&#xff08;KY-036&#xff09; 具体讲解 这个比较简单&#xff0c;就是触摸后给个信号 电路连接 在Arduino上将VCC引脚连接到5V。 将GND连接到Arduino的GND。 将OUT连接到Arduino上的D2 代码实现 void setup() {pinMode(2, INPUT);Seri…

Python数值计算(1)——Numpy中数据的保存和加载

这里讨论一下在进行数值计算中&#xff0c;对计算数据的保存和加载。 1. 文本格式 这种方式可以采用文本的方式保存numpy数组&#xff0c;函数原型如下&#xff1a; numpy.savetxt(fname, X, fmt%.18e, delimiter , newline\n, header, footer, comments# , encodingNone) …

.NET 一款反序列化打入冰蝎内存马的工具

01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等&#xff08;包括但不限于&#xff09;进行检测或维护参考&#xff0c;未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失&#xf…

开源项目的发展趋势,以及参与开源项目可以获得的经验和成果,以及涉及到的注意事项

目录 一、当前开源项目的发展趋势 1. 全球化协作与社区增长 2. 多领域技术创新与迭代加速 3. 开放协作模式 4. 商业化与产业融合 5. 安全性与隐私保护 6. 跨界融合与生态构建 7. 政策支持 二、参与开源项目的经验和收获 1. 技术能力提升 2. 团队协作与沟通能力 3.领…

大数据技术基础编程、实验和案例----大数据课程综合实验案例

一、实验目的 (1&#xff09;熟悉Linux系统、MySQL、Hadoop、HBase、Hive、Sqoop、R、Eclipse等系统和软件的安装和使用&#xff1b; (2&#xff09;了解大数据处理的基本流程&#xff1b; (3&#xff09;熟悉数据预处理方法&#xff1b; (4&#xff09;熟悉在不同类型数据库之…

Java未来还是霸主吗?Java 在当今企业中的未来到底是什么?

Java 及其生态系统对于许多现代企业的成功至关重要。它是一种多功能语言&#xff0c;对许多用例提供强大支持&#xff0c;并具有强大的新功能来应对棘手的情况。但您可能会问自己&#xff1a;Java 的未来是什么&#xff1f; 尽管自 1999 年以来 Java 一直是软件开发领域的关键角…

elementUI,vue,前端判断时间是否有交集(重合)方法

分成三个部分 html※ 具体实现方法methods帮助理解逻辑图&#xff1a;![smallredBook&#xff1a;灵魂画手&#xff0c;业余爱好支持支持](https://i-blog.csdnimg.cn/direct/665950ee60964ef8912ce4f1a98dcc0e.jpeg#pic_center) 简化&#xff1a;由上面的逻辑反推[^1] html &…

FreeRTOS互斥量

文章目录 一、互斥量的使用场合二、互斥量函数1、创建2、其他函数 三、示例: 优先级继承四、递归锁1、死锁的概念2、自我死锁3、函数 怎么独享厕所&#xff1f;自己开门上锁&#xff0c;完事了自己开锁。 你当然可以进去后&#xff0c;让别人帮你把门&#xff1a;但是&#xff…

无人机环保行业解决方案-应急环境污染处理

无人机环境应急处理 传统环境应急的典型挑战 发生环境应急事件时&#xff0c;最重要的是快速获取前方信息。然而&#xff0c;有毒气体 和易燃易爆品多&#xff0c;存在二次爆炸风险&#xff0c;严重威胁人身安全。无人机可快 速赶到事故现场&#xff0c;查看周边环境、污染物…

单火供电零线发生器 单火变零火线开关面板零火开关老房改造必备

创作 史新华 零线发生器套件与单火线供电套件&#xff0c;作为现代智能家居解决方案中的创新之作&#xff0c;它们犹如智能电气领域的魔术师&#xff0c;巧妙地解决了传统智能开关在单火线路环境中因无零线而难以应用的难题。这些套件&#xff0c;如同智能电气世界的桥梁&…

【守卫你的安全】基于高通QCS6490之AI智慧电子围篱展示方案

高通QCS6490是一款专为工业和商业物联网应用而设计的系统单芯片(SoC)&#xff0c;支援高阶物联网装置的Wi-Fi 6E连线&#xff0c;以及先进的摄像头、人工智能和计算功能&#xff0c;以实现低功耗下的强大性能。这款芯片结合高通Kryo™ 670 CPU和高通Hexagon处理器&#xff0c;具…