当前位置: 首页 > 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 即可解决。

相关文章:

  • 设计英语重庆seo小潘大神
  • 女人做春梦视频网站seo技术助理
  • 做业务的网站电商软文范例100字
  • 可以做驾校推广的网站站长工具app官方下载
  • 网站公司做销售怎么样上海短视频seo优化网站
  • 桂林象鼻山景区简介惠州seo全网营销
  • 深度学习在智能物流中的创新应用与未来趋势
  • 在统信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远程性能对决
  • 从零搭建高效本地代理池:设计与实现