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

vue3中使用vue-grid-layout来实现可拖动的仪表盘面板

1.package.json内安装的包:

  "vue-grid-layout": "^3.0.0-beta1",

2.main.js内引入:

import { createApp } from "vue";
import ElementPlus from "element-plus";
import "element-plus/dist/index.css";
import VueGridLayout from "vue-grid-layout";
import App from "./App.vue";
// 其他引入
import "./style/element_visiable.scss";
import "./core/gin-vue-admin";
import router from "@/router/index";
import "@/permission";
import run from "@/core/gin-vue-admin.js";
import auth from "@/directive/auth";
import { store } from "@/pinia";const app = createApp(App);
app.config.productionTip = false;app.use(run).use(store).use(auth).use(router).use(VueGridLayout).use(ElementPlus).mount("#app");export default app;

3.相关代码简易demo

 <template><div class="grid-demo"><grid-layout:layout="layout":col-num="12":row-height="30":is-draggable="true":is-resizable="true":vertical-compact="true":use-css-transforms="true"@layout-ready="layoutReadyEvent"@layout-updated="layoutUpdatedEvent"><grid-itemv-for="item in layout":key="item.i":x="item.x":y="item.y":w="item.w":h="item.h":i="item.i":drag-allow-from="'.grid-drag-handle'"@resized="resizedEvent"@moved="movedEvent"><div class="grid-item-content"><div>{{ item.i }}</div><div class="grid-drag-handle" style="cursor: move">Drag</div></div></grid-item></grid-layout></div>
</template><script setup>
import { ref, onMounted } from "vue";
const layout = ref([]);
onMounted(() => {layout.value = [{ x: 0, y: 0, w: 2, h: 2, i: "0" },{ x: 2, y: 0, w: 4, h: 2, i: "1" },{ x: 6, y: 0, w: 2, h: 4, i: "2" },];
});
const layoutUpdatedEvent = (layout) => {console.log("layoutUpdatedEvent", layout);
};
const resizedEvent = (item, size) => {console.log("resizedEvent", item, size);
};
const movedEvent = (item, delta) => {console.log("movedEvent", item, delta);
};
const layoutReadyEvent = (layout) => {console.log(layout, "layoutReadyEvent");
};
</script><style scoped>
.grid-demo {padding: 20px;
}.vue-grid-item {background-color: #e0e0e0;border: 1px solid #ccc;border-radius: 4px;
}.grid-item-content {height: 100%;display: flex;align-items: center;justify-content: center;font-size: 18px;color: #333;
}
</style>

注意:如果有这种类型的报错
在这里插入图片描述
这些错误通常由 Vue Grid Layout 和 interact.js 交互库引起,可能是由于组件更新面板数组时,Vue Grid Layout 的内部状态未能及时同步或清理所致。例如,当 layout 字段需要异步获取时,可以在 grid-layout 组件中添加 v-if 条件判断;若在更新 layout 时出现该错误,使用 nextTick 即可解决。

http://www.dtcms.com/a/259984.html

相关文章:

  • 深度学习在智能物流中的创新应用与未来趋势
  • 在统信UOS(Linux)中构建SQLite3桌面应用笔记
  • C++之string类的实现代码及其详解(上)
  • 0 数学习题本
  • 【stm32】HAL库开发——Cube配置基本定时器
  • Llama 3 + Qwen2双模型实战:单张3090构建企业级多模态知识库(2025精解版)
  • 关于 ARM64 汇编:调用流程与栈帧结构解析
  • Jenkins与Kubernetes深度整合实践
  • GitLab 18.1 高级 SAST 已支持 PHP,可升级体验!
  • OSPF 路由协议详细笔记
  • Python-7-读取/写入文件数据
  • mb_bootloop_le.elf是使用microblaze默认的elf文件,这个文件包括哪些内容?
  • n8n智能体新境界:MCP服务器简化复杂自动化
  • Apache 支持 HTTPS
  • 系统性能优化-6 TCP 三次握手
  • easyExcel导入多sheet的Excel,存在合并单元格、列不固定的情况
  • 自动获取文件的内存大小怎么设置?批量获取文件名和内存大小到Excel中的方法
  • notepad++ 怎么快速给 python (nginx、shell) 文件加 # 注释
  • 远程玩3A大作要多少帧?ToDesk、向日葵、UU远程性能对决
  • 从零搭建高效本地代理池:设计与实现
  • Ubuntu中控制用户cpu资源分配控制步骤
  • Flutter 多平台项目开发指南
  • 【Go语言-Day 9】指针基础:深入理解内存地址与值传递
  • 量学云讲堂2025年天山至尊刘智辉第63期视频课程+第2段位课
  • Trae IDE 大师评测:驾驭 MCP Server - Figma AI Bridge 一键成就前端瑰宝
  • 原子级制造革命:双原子镧催化剂登顶Angew,焦耳超快加热技术深度解析
  • leetcode:50. Pow(x, n)(python3解法,数学相关算法题)
  • ISP Pipeline(3):Lens Shading Correction 镜头阴影校正
  • OpenCV CUDA模块设备层-----逐通道的正弦运算函数sin()
  • AI智能体——OpenManus 源码学习