vue使用拖拽功能实现仓库存放货物的需求

效果:
在这里插入图片描述
代码

<template><div><div class="bigTitle">xxxxxxxxxxxxxx仓库拖拽系统</div><div class="container2 flex-j-space-between"><div class="product-list"><div class="leftTree head"><div class="left">物品清单</div></div><div class="product-container"><el-collapse v-model="activeNames" @change="handleChange"><el-collapse-itemclass="list"v-for="(item,index) in products":title="(index + 1) + '、' + item.name":name="index":key="index"><div :draggable="true" @dragstart="onDragStart(item)"><span>长度:</span><span>{{ item.x }}</span><span></span><span>宽度:</span><span>{{ item.y }}</span><span></span><span>高度:</span><span>{{ item.h }}</span><span></span></div></el-collapse-item></el-collapse></div></div><div class="delivery-cabinet"><div class="leftTree head"><div class="left">仓库</div></div><div style="padding-left:48px;"><span class="display-inline t-center" style="width:27.6%;"></span><span class="display-inline t-center" style="margin-left:2%;width:18.4%;"></span><span class="display-inline t-center" style="margin-left:2%;width:27.6%;"></span><span class="display-inline t-center" style="margin-left:2%;width:18.4%;"></span></div><div class="flex-j-space-between height100"><div class="regionSet"><div>D</div><div>C</div><div>B</div><div>A</div></div><div class="bigBox"><divv-for="(item,index) in cabinets":key="index":style="{width:item.x,height:item.y,marginRight:item.mr}"@drop="onDrop(item.id)"@dragover.prevent:draggable="false"class="smallBox"><divv-for="product in item.products":key="product.id"class="product":draggable="false">{{ JSON.parse(product).name }}</div></div></div></div></div></div></div>
</template><script>
// import draggable from "vuedraggable";export default {components: {// draggable},data() {return {products: [{ id: 1, name: "苹果", x: 30, y: 34, h: 25 },{ id: 2, name: "香蕉", x: 12, y: 10, h: 21 },{ id: 3, name: "西瓜", x: 30, y: 50, h: 23 },{ id: 4, name: "荔枝", x: 57, y: 12, h: 24 },{ id: 5, name: "哈密瓜", x: 45, y: 53, h: 32 },{ id: 6, name: "菠萝", x: 11, y: 5, h: 54 },{ id: 7, name: "葡萄", x: 4, y: 34, h: 6 }],cabinets: [{id: 1,x: "9.2%",y: "24%",mt: 0,mb: 0,mr: 0,name: 1,location: [{ name: "手表", width: 28, height: 50, x: 0, y: 0, bgClor: "red" },{name: "背包",width: 28,height: 16,x: 40,y: 40,bgClor: "#ff33ff"},{name: "缆索",width: 10,height: 80,x: 29,y: 0,bgClor: "yellow"},{name: "头盔",width: 28,height: 40,x: 40,y: 0,bgClor: "green"},{ name: "面包", width: 33, height: 70, x: 68, y: 0, bgClor: "blue" }],products: []},{id: 2,x: "9.2%",y: "24%",mt: 0,mb: 0,mr: 0,name: 1,products: []},{id: 3,x: "9.2%",y: "24%",mt: 0,mb: 0,mr: "2%",name: 1,products: []},{id: 4,x: "9.2%",y: "24%",mt: 0,mb: 0,mr: 0,name: 1,products: []},{id: 5,x: "9.2%",y: "24%",mt: 0,mb: 0,mr: "2%",name: 1,products: []},{id: 6,x: "9.2%",y: "24%",mt: 0,mb: 0,mr: 0,name: 1,products: []},{id: 7,x: "9.2%",y: "24%",mt: 0,mb: 0,mr: 0,name: 1,products: []},{id: 8,x: "9.2%",y: "24%",mt: 0,mb: 0,mr: "2%",name: 1,products: []},{id: 9,x: "9.2%",y: "24%",mt: 0,mb: 0,mr: 0,name: 1,products: []},{id: 10,x: "9.2%",y: "24%",mt: 0,mb: 0,mr: 0,name: 1,products: []},{id: 11,x: "9.2%",y: "24%",mt: 0,mb: 0,mr: 0,name: 1,products: []},{id: 12,x: "9.2%",y: "24%",mt: 0,mb: 0,mr: 0,name: 1,products: []},{id: 13,x: "9.2%",y: "24%",mt: 0,mb: 0,mr: "2%",name: 1,products: []},{id: 14,x: "9.2%",y: "24%",mt: 0,mb: 0,mr: 0,name: 1,products: []},{id: 15,x: "9.2%",y: "24%",mt: 0,mb: 0,mr: "2%",name: 1,products: []},{id: 16,x: "9.2%",y: "24%",mt: 0,mb: 0,mr: 0,name: 1,products: []},{id: 17,x: "9.2%",y: "24%",mt: 0,mb: 0,mr: 0,name: 1,products: []},{id: 18,x: "9.2%",y: "24%",mt: 0,mb: 0,mr: "2%",name: 1,products: []},{id: 19,x: "9.2%",y: "24%",mt: 0,mb: 0,mr: 0,name: 1,products: []},{id: 20,x: "9.2%",y: "24%",mt: 0,mb: 0,mr: 0,name: 1,products: []},{id: 21,x: "9.2%",y: "24%",mt: 0,mb: 0,mr: 0,name: 1,products: []},{id: 22,x: "9.2%",y: "24%",mt: 0,mb: 0,mr: 0,name: 1,products: []},{id: 23,x: "9.2%",y: "24%",mt: 0,mb: 0,mr: "2%",name: 1,products: []},{id: 24,x: "9.2%",y: "24%",mt: 0,mb: 0,mr: 0,name: 1,products: []},{id: 25,x: "9.2%",y: "24%",mt: 0,mb: 0,mr: "2%",name: 1,products: []},{id: 26,x: "9.2%",y: "24%",mt: 0,mb: 0,mr: 0,name: 1,products: []},{id: 27,x: "9.2%",y: "24%",mt: 0,mb: 0,mr: 0,name: 1,products: []},{id: 28,x: "9.2%",y: "24%",mt: 0,mb: 0,mr: "2%",name: 1,products: []},{id: 29,x: "9.2%",y: "24%",mt: 0,mb: 0,mr: 0,name: 1,products: []},{id: 30,x: "9.2%",y: "24%",mt: 0,mb: 0,mr: 0,name: 1,products: []},{id: 31,x: "9.2%",y: "24%",mt: 0,mb: 0,mr: 0,name: 1,products: []},{id: 32,x: "9.2%",y: "24%",mt: 0,mb: 0,mr: 0,name: 1,products: []},{id: 33,x: "9.2%",y: "24%",mt: 0,mb: 0,mr: "2%",name: 1,products: []},{id: 34,x: "9.2%",y: "24%",mt: 0,mb: 0,mr: 0,name: 1,products: []},{id: 35,x: "9.2%",y: "24%",mt: 0,mb: 0,mr: "2%",name: 1,products: []},{id: 36,x: "9.2%",y: "24%",mt: 0,mb: 0,mr: 0,name: 1,products: []},{id: 37,x: "9.2%",y: "24%",mt: 0,mb: 0,mr: 0,name: 1,products: []},{id: 38,x: "9.2%",y: "24%",mt: 0,mb: 0,mr: "2%",name: 1,products: []},{id: 39,x: "9.2%",y: "24%",mt: 0,mb: 0,mr: 0,name: 1,products: []},{id: 40,x: "9.2%",y: "24%",mt: 0,mb: 0,mr: 0,name: 1,products: []}// 其他柜子...],activeNames: ["1"]};},methods: {onDragStart(product) {console.log("1111111", product);event.dataTransfer.setData("text/plain", JSON.stringify(product));},onDrop(cabinetId) {const productData = event.dataTransfer.getData("text/plain");console.log("22222222222", productData);const cabinet = this.cabinets.find(cabinet => cabinet.id === cabinetId);cabinet.products.push(productData);console.log("111", cabinet);},handleChange(val) {console.log(val);}}
};
</script><style scoped>
.bigTitle {height: 40px;line-height: 40px;font-size: 24px;text-align: center;padding-top: 5px;
}
.container2 {width: 100%;height: calc(100vh - 40px);padding: 10px;overflow: hidden;
}
.head {border: 0px solid black;width: 100%;height: 40px;display: flex;justify-content: space-between;align-items: center;padding: 0 0 0 15px;border-bottom: #eff4fa 1px solid;.left {font-weight: bold;font-size: 16px;border-left: 4px blue solid;display: flex;align-items: center;height: 18px;padding-left: 10px;}
}
.product-list {width: 400px;border: 1px solid #f0f0f0;height: 100%;
}
.delivery-cabinet {height: 100%;flex: 1;
}.product-list h2,
.delivery-cabinet h2 {font-size: 24px;margin-bottom: 10px;
}.product-container {/* padding: 10px;border-radius: 4px; */
}.product {padding: 10px;margin-bottom: 8px;background-color: #fff;border: 1px solid #ccc;border-radius: 4px;cursor: move;
}.cabinet-container {background-color: #f2f2f2;padding: 10px;border-radius: 4px;
}.cabinet-slot {padding: 10px;margin-bottom: 8px;background-color: #fff;border: 1px solid #ccc;border-radius: 4px;
}.slot-number {font-size: 18px;font-weight: bold;margin-bottom: 5px;
}.slot-content {display: flex;flex-wrap: wrap;gap: 8px;
}.slot-content .product {padding: 6px 8px;background-color: #eee;
}
.regionSet {width: 45px;height: 100%;margin-top: 10px;
}
.regionSet div {height: 23%;display: flex;align-items: center;justify-content: center;
}
.bigBox {display: flex;flex-direction: row;flex-wrap: wrap;justify-content: flex-start;height: calc(100% - 40px);width: calc(100% - 50px);padding: 10px 10px;padding-left: 0px;
}
.smallBox {border: 1px solid green;
}
</style>

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

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

相关文章

Clickhouse 优势与部署

一、clickhouse简介 1.1clickhouse介绍 ClickHouse的背后研发团队是俄罗斯的Yandex公司&#xff0c;2011年在纳斯达克上市&#xff0c;它的核心产品是搜索引擎。我们知道&#xff0c;做搜索引擎的公司营收非常依赖流量和在线广告&#xff0c;所以做搜索引擎的公司一般会并行推…

网关gateway的简介和搭建过程

目录 1.什么是网关和网关的应用情景 2.网关是如何演化来的&#xff0c;在微服务中有什么作用&#xff1f; 3.网关的基本功能 4.Spring Cloud gateway的发展史 5.和网关类似的功能组件&#xff1a; 6.为什么微服务当中一定要有网关 7.微服务网关的优点 8.gateway的搭建过程…

InterProcessMutex 类的作用和使用

InterProcessMutex 类是Curator框架中的一个分布式锁的实现&#xff0c;用于在分布式环境下实现互斥锁。 InterProcessMutex 的使用步骤如下&#xff1a; 创建 CuratorFramework 客户端实例&#xff0c;并启动客户端连接到 ZooKeeper 服务器。使用 CuratorFramework 的 creat…

Arthas GC日志-JVM(十八)

上篇文章说jvm的实际运行情况。 Jvm实际运行情况-JVM&#xff08;十七&#xff09; Arthas介绍 因为arthas完全是java代码写的&#xff0c;我们直接用命令启动&#xff1a; Java -jar arthas-boot.jar 启动成功后&#xff0c;选择我们项目的进程。 进入我们可用dashboard…

python中几个有趣的函数和推导式

前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! 一、range()函数 1、range()通常用来做循环。 2、range()生成器的特性。 例子&#xff1a;假如range&#xff08;&#xff09;中使用的数值特别大&#xff0c;为100000000000000000000000000000&#xff1f; python解释…

Go学习第四天

Interface空接口万能类型与类型断言机制 package mainimport "fmt"// interface{}是万能数据类型 func myFunc(arg interface{}) {fmt.Println("myFunc is celled....")fmt.Println(arg)// interface{} 该如何区分 此时引用的底层数据类型到底是什么&…

iPhone 7透明屏的显示效果怎么样?

iPhone 7是苹果公司于2016年推出的一款智能手机&#xff0c;它采用了4.7英寸的Retina HD显示屏&#xff0c;分辨率为1334x750像素。 虽然iPhone 7的屏幕并不是透明的&#xff0c;但是苹果公司在设计上采用了一些技术&#xff0c;使得用户在使用iPhone 7时可以有一种透明的感觉…

【实操教程】如何开始用Qt Widgets编程?(一)

Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写&#xff0c;所有平台无差别运行&#xff0c;更提供了几乎所有开发过程中需要用到的工具。如今&#xff0c;Qt已被运用于超过70个行业、数千家企业&#xff0c;支持数百万设备及应用。 在本文中&#xff0…

乳腺癌CT影像数据的深度学习:R语言与ANN神经网络构建高性能分类诊断模型

一、引言 乳腺癌是全球最常见的女性恶性肿瘤之一&#xff0c;也影响着男性的健康。据统计&#xff0c;每年有数百万人被诊断出患有乳腺癌[1]。乳腺癌的早期检测和准确诊断对于治疗和预后至关重要。然而&#xff0c;乳腺癌的早期诊断面临许多挑战&#xff0c;如图像解读的主观性…

Qt QThread的moveToThread方法使用

Qt线程简介 从 Qt4.4 版本之后&#xff0c;因为 QThread 的 run 方法创建新线程这样实现与 Qt 设计的理念不符&#xff0c;Qt 主推使用 moveToThread 方法来创建新线程。QThread 应该被看做是操作系统线程的接口或控制点&#xff0c;而不应该包含需要在新线程中运行的代码。需…

数据结构10 -查找_树表查找

创建二叉搜索树 二叉搜索树 二叉搜索树是有数值的了&#xff0c;二叉搜索树是一个有序树。 若它的左子树不空&#xff0c;则左子树上所有结点的值均小于它的根结点的值&#xff1b; 若它的右子树不空&#xff0c;则右子树上所有结点的值均大于它的根结点的值&#xff1b; 它…

在线LaTeX公式编辑器编辑公式

在线LaTeX公式编辑器编辑公式 在编辑LaTex文档时候&#xff0c;需要输入公式&#xff0c;可以使用在线LaTeX公式编辑器编辑公式&#xff0c;其链接为: 在线LaTeX公式编辑器&#xff0c;https://www.latexlive.com/home 图1 在线LaTeX公式编辑器界面 图2 在线LaTeX公式编辑器…