vue实现可拖拽dialog封装
一、实现modal弹窗组件
<template><divv-if="visible"class="customer-dialog"id="customer-dialog":style="dialogStyles"v-dialogDrag:[dialogDrag]><div class="dialog-container"><divclass="dialog-header"id="dialog-header":style="{'--dialog-center': `${center ? 'center' : 'left'}`}"><slot name="header" v-if="footerHide"><span class="dialog__title">{{ title }}</span></slot><button class="dialog__header-close" @click="closeDialog"><i class="el-dialog__close el-icon el-icon-close"></i></button></div><div class="dialog-body"><slot> </slot></div><divclass="dialog-footer":style="{'--dialog-center': `${center ? 'center' : 'right'}`}"v-if="footerHide"><slot name="footer"><el-button size="small" @click="closeDialog">取消</el-button></slot></div></div></div>
</template><script>
export default {name: 'CustomDialog',props: {title: {type: String,default: 'Default Title'},/*** @description 是否开启拖拽功能* @default false*/dialogDrag: {type: Boolean,default: false},width: {type: [Number, String],default: 500},maxHeight: {type: [Number, String],default: 800},/*** 未传值时候,默认* top: 30%* 传入值时候,以传入值为准*/top: {type: Number,default: 0},/*** 未传值时候,默认* left: 50%* 传入值时候,以传入值为准*/left: {type: Number,default: 0},zIndex: {type: Number,default: 9999},/*** 是否显示* @default false*/value: {type: Boolean,default: false},/*** 是否居中* @default true*/center: {type: Boolean,default: false},/*** 是否隐藏footer* @default false*/footerHide: {type: Boolean,default: false},/*** 是否隐藏header* @default false*/headerHide: {type: Boolean,default: false}},computed: {dialogStyles () {return {'--dialog-width':typeof this.width === 'number' ? `${this.width}px` : this.width,'--dialog-max-height':typeof this.maxHeight === 'number'? `${this.maxHeight}px`: this.maxHeight,'--dialog-top': this.top? typeof this.top === 'number'? `${this.top}px`: this.top: '30%','--dialog-left': this.left? typeof this.left === 'number'? `${this.left}px`: this.left: '50%','--dialog-z-index': this.zIndex};},visible: {get () {return this.value;},set (val) {this.$emit('input', val);}}},methods: {closeDialog () {this.visible = false;}}
};
</script><style scoped lang="scss">
.customer-dialog {width: var(--dialog-width);max-width: calc(100vw - 32px);max-height: var(--dialog-max-height);color: rgba(0, 0, 0, 0.88);line-height: 1.5714285714285714;list-style: none;margin: 0 auto;position: fixed;top: var(--dialog-top);left: var(--dialog-left);transform: translate(-50%, -50%);overflow: auto;margin: 0;box-sizing: border-box;background-color: #ffffff;background-clip: padding-box;border: 0;border-radius: 8px;box-shadow: 0 6px 16px 0 rgba(0, 0, 0, 0.08),0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 9px 28px 8px rgba(0, 0, 0, 0.05);pointer-events: auto;z-index: var(--dialog-z-index);// overflow-y: auto;
}.dialog-container {width: 100%;background: white;border-radius: 5px;display: flex;flex-direction: column;justify-content: space-between;.dialog-header {width: 100%;background: rgba(0, 0, 0, 0.5);background-color: rgba(230, 233, 240, 0.15);border-bottom: 1px #e6e9f0 solid;padding: 10px 0;.dialog__title {font-weight: bold;display: block;font-size: 1rem;font-weight: bold;height: 32px;line-height: 32px;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;margin-left: 15px;}.dialog__header-close {position: absolute;top: 10px;right: 10px;padding: 5px;background: transparent;border: none;outline: none;cursor: pointer;font-size: 16px;&:hover {font-size: 16px;font-weight: bold;color: rgba(0, 0, 0, 0.88);background-color: rgba(0, 0, 0, 0.06);transition: all 0.3s;}}}.dialog-body {box-sizing: border-box;font-size: 14px;line-height: 1.5714285714285714;word-wrap: break-word;flex: 1;overflow: auto;padding: 0 20px;position: relative;}
}.dialog-header,
.dialog-body,
.dialog-footer {text-align: var(--dialog-center);margin-bottom: 10px;
}
.dialog-footer {display: flex;justify-content: var(--dialog-center);align-items: center;padding: 0 10px;
}
.footer-title {margin-right: 10px;
}
</style>
二、实现拖动自定义指令
/** @Description:拖拽指令* @Author: rjl* @Date: 2024-07-10 18:03:37* @LastEditTime: 2024-07-16 20:34:54* @LastEditors: Ran junlin*/
/*** 可拖动弹窗* @description 使用 v-dialogDrag 调用指令;*/import { nextTick } from 'vue';
export default {bind (el, binding) {nextTick(() => {const { arg } = binding;console.log(arg,'arg');if (!arg) return;const dialogHeaderEl = document.querySelector('.dialog-header');const dragDom = document.querySelector('.customer-dialog');if (!dialogHeaderEl || !dragDom) {return console.log('dom不存在');}dialogHeaderEl.style.cursor = 'move';// 获取原有属性 ie dom元素.currentStyle 火狐谷歌 window.getComputedStyle(dom元素, null);const sty =dragDom.currentStyle || window.getComputedStyle(dragDom, null);dialogHeaderEl.onmousedown = e => {// 鼠标按下,计算当前元素距离可视区的距离const disX = e.clientX - dialogHeaderEl.offsetLeft;const disY = e.clientY - dialogHeaderEl.offsetTop;// 获取到的值带px 正则匹配替换let styL, styT;// 注意在ie中 第一次获取到的值为组件自带50% 移动之后赋值为pxif (sty.left.includes('%')) {styL =+document.body.clientWidth *(+sty.left.replace(/\%/g, '') / 100);styT =+document.body.clientHeight *(+sty.top.replace(/\%/g, '') / 100);} else {styL = +sty.left.replace(/\px/g, '');styT = +sty.top.replace(/\px/g, '');}document.onmousemove = function (e) {// 通过事件委托,计算移动的距离const l = e.clientX - disX;const t = e.clientY - disY;// 移动当前元素dragDom.style.left = `${l + styL}px`;dragDom.style.top = `${t + styT}px`;//将此时的位置传出去//binding.value({x:e.pageX,y:e.pageY})};document.onmouseup = function (e) {document.onmousemove = null;document.onmouseup = null;};};});}
};
三、使用
<ModaldialogDragv-model="dialogVisible"width="550px":left="790":top="240"title="区域查车"
><div class="body"><RTableref="table"v-loading="pending"border:tableData="tableData"row-key="id"size="small"stripewidth="100%"height="100%":column="columns"/></div>
</Modal>
相关文章:
vue实现可拖拽dialog封装
一、实现modal弹窗组件 <template><divv-if"visible"class"customer-dialog"id"customer-dialog":style"dialogStyles"v-dialogDrag:[dialogDrag]><div class"dialog-container"><divclass"dial…...
本地多模态看图说话-llava
其中图片为bast64转码,方便json序列化。 其中模型llava为本地ollama运行的模型,如:ollama run llava 还有其它的模型如:llava-phi3,通过phi3微调过的版本。 实际测试下来,发现本地多模型的性能不佳&…...
人工智能算法工程师(中级)课程14-神经网络的优化与设计之拟合问题及优化与代码详解
大家好,我是微学AI,今天给大家介绍一下人工智能算法工程师(中级)课程14-神经网络的优化与设计之拟合问题及优化与代码详解。在机器学习和深度学习领域,模型的训练目标是找到一组参数,使得模型能够从训练数据中学习到有用的模式&am…...
Java异常抛出与处理方法
在Java编程中,异常处理是一个非常重要的部分。通过正确的异常处理,我们可以提高程序的健壮性和可靠性,避免程序在运行过程中出现意外的崩溃。本文将详细讲述Java异常的抛出与处理方法,并通过示例代码进行说明。 一、Java异常的分类 Java中的异常体系结构可以分为三类: 检…...
兼容性测试主要有什么类型?
兼容性测试的类型 有两种类型的兼容性测试。这是一个快速细分。 1、前向兼容性测试 向前兼容性测试或向上兼容性测试可确保当前软件版本在相关组件(例如操作系统、浏览器和第三方库)的未来版本中保持功能。此类测试对于在系统升级期间保持稳定性和用户体验至关重要。 例如&…...
设计模式--组合模式
组合模式(Composite Pattern)详解 组合模式是一种结构型设计模式,它允许你将对象组合成树形结构来表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。 适用场景 需要表示对象的部分-整体层次结构时&am…...
ArduPilot开源代码之AP_DAL_RangeFinder
ArduPilot开源代码之AP_DAL_RangeFinder 1. 源由2. 框架设计2.1 枚举 Status2.2 公有方法2.3 私有成员变量 3. 重要例程3.1 应用函数3.1.1 ground_clearance_cm_orient3.1.2 max_distance_cm_orient3.1.3 has_orientation3.1.4 get_backend 3.2 其他函数3.2.1 AP_DAL_RangeFind…...
SpringCloud教程 | 第九篇: 使用API Gateway
1、参考资料 SpringCloud基础篇-10-服务网关-Gateway_springcloud gateway-CSDN博客 2、先学习路由,参考了5.1 2.1、建了一个cloudGatewayDemo,这是用来配置网关的工程,配置如下: http://localhost:18080/aaa/name 该接口代码如…...
数据结构——hash(hashmap源码探究)
hash是什么? hash也称为散列,就是把任意长度的输入,通过散列算法,变成固定长度的输出,这个输出值就是散列值。 举例来说明一下什么是hash: 假设我们要把1~12存入到一个大小是5的hash表中,我们…...
国产麒麟、UOS在线打开pdf加盖印章
PageOffice支持两种电子印章方案,可实现对Word、Excel、PDF文档加盖PageOffice自带印章或ZoomSeal电子印章(全方位保护、防篡改、防伪造)。Word和Excel的盖章功能请参考:Word和Excel加盖印章和签字功能 (目前只支持win…...
破解反爬虫策略 /_guard/auto.js(二)实战
这次我们用上篇文章讲到的方法来真正破解一下反爬虫策略,这两个案例是两个不同的网站,一个用的是 /_guard/auto.js,另一个用的是/_guard/delay_jump.js。经过解析发现这两个网站用的反爬虫策略基本是一模一样,只不过在js混淆和生成…...
同样是人工智能 客户在哪儿AI和GPT等大模型有什么不同
书接上回。为了统一回答朋友们的疑惑,此前的两篇文章,着重讲述了客户在哪儿AI的企业全历史行为数据和企业信息查询平台上的数据的区别,以及客户在哪儿AI的ToB获客服务和AI外呼机器人的获客服务的不同。本期接着讲——客户在哪儿AI VS 大模型&…...
AES Android IOS H5 加密方案
前景: 1、本项目原有功能RSA客户端对敏感信息进行加密 2、本次漏洞说是服务端返回值有敏感信息,需要密文返回 3、最初只跟H5联调成功,后续APP联调失败(H5和APP的需求排期不一致),没关注到通用性 方案: 本次方案不…...
一文了解变阻器和电位器的定义、原理、应用及其对比
变阻器的定义 两端可变电阻器(称为变阻器)利用电阻来调节电流。电阻丝环绕在陶瓷或瓷器等绝缘芯上。当刮水器沿着电阻丝移动时,电路的有效电阻会发生变化。因此,它提供了精确的电流控制。调光器、电机速度控制器和加热元件使用变…...
WPF实现一个带旋转动画的菜单栏
WPF实现一个带旋转动画的菜单栏 一、创建WPF项目及文件1、创建项目2、创建文件夹及文件3、添加引用 二、代码实现2.ControlAttachProperty类 一、创建WPF项目及文件 1、创建项目 打开VS2022,创建一个WPF项目,如下所示 2、创建文件夹及文件 创建资源文件夹&…...
使用Dockerfile构建镜像
目录 1.使用Dockerfile构建tomcat镜像 1.1 通过ARG传参构建不同版本的tomcat 2.缩小镜像的体积大小 2.1 使用较小体积的基础镜像 2.2 多级构建减少体积 1.使用Dockerfile构建tomcat镜像 cd /opt mkdir tomcat cd tomcat/ 上传tomcat所需的依赖包 使用tar xf 解压三个压缩…...
概率论原理精解【3】
文章目录 向量值向量值函数导数对称矩阵定义性质例子应用 向量值理论基础定义性质应用示例 向量值函数的导数定义性质应用 向量值 向量值函数导数 D n ⊂ R n , 向量值函数 f : D n → R m D^n \subset R^n,向量值函数f:D^n\rightarrow R^m Dn⊂Rn,向量值函数f:Dn→Rm 1. 向量…...
[C/C++入门][循环]14、计算2的幂(2的n次方)
计算2的幂(即2的n次方)非常经典。你懂几种方法呢?很多人只会一种,我们来分析一下。 可以通过多种方式实现: 1、最简单的方法之一是使用位运算符<<,它本质上是在二进制表示下对2进行左移操作&#x…...
RPC与服务的注册发现
文章目录 1. 什么是远程过程调用(RPC)?2. RPC的流程3. RPC实践4. RPC与REST的区别4.1 RPC与REST的相似之处4.2 RPC与REST的架构原则4.3 RPC与REST的主要区别 5. RPC与服务发现5.1 以zookeeper为服务注册中心5.2 以etcd为服务注册中心 6. 小结参考 1. 什么是远程过程调用(RPC)?…...
3112. 访问消失节点的最少时间 Medium
给你一个二维数组 edges 表示一个 n 个点的无向图,其中 edges[i] [ui, vi, lengthi] 表示节点 ui 和节点 vi 之间有一条需要 lengthi 单位时间通过的无向边。 同时给你一个数组 disappear ,其中 disappear[i] 表示节点 i 从图中消失的时间点࿰…...
FastAPI 学习之路(五十二)WebSockets(八)接受/发送json格式消息
前面我们发送的大多数都是text类型的消息,对于text消息来说,后端处理出来要麻烦的多,那么我们可以不可以传递json格式的数据,对于前后端来说都比较友好,答案是肯定的,我们需要做下处理。 首先,…...
Go语言并发编程-案例_3
案例 并发目录大小统计 业务逻辑 统计目录的文件数量和大小(或其他信息)。示例输出: // 某个目录:2637 files 1149.87 MB 实现思路 给定一个或多个目录,并发的统计每个目录的size,最后累加到一起。 当…...
pikachu之跨站脚本攻击(x‘s‘s)
1get型 输入a看一下 接着输入<a> 发现<>没有被过滤当做标签处理了 尝试在表单提交的框里面,输入xss语句 尝试输入<script>alert(1)</script> 发现有长度限制 因为这里是get请求 get请求的特点是:传参是在url中的 所以我们可以在…...
Qt模型/视图架构——委托(delegate)
一、为什么需要委托 模型(model)用来数据存储,视图(view)用来展示数据。因此,模型/视图架构是一种将数据存储和界面展示分离的编程方法。具体如下图所示: 由图可知,模型向视图提供数…...
python3.11SSL: SSLV3_ALERT_HANDSHAKE_FAILURE
参考:python request包 版本不兼容 报错sslv3 alert handshake failure 解决方法-CSDN博客 修改:Python311\Lib\site-packages\urllib3\util\ssl_.py 新版本3.11里默认没有DEFAULT_CIPHERS 补回来: #__imported from 3.6.8 # A secure default. # So…...
[深度学习]基于yolov10+streamlit目标检测演示系统设计
YOLOv10结合Streamlit构建的目标检测系统,不仅极大地增强了实时目标识别的能力,还通过其直观的用户界面实现了对图片、视频乃至摄像头输入的无缝支持。该系统利用YOLOv10的高效检测算法,能够快速准确地识别图像中的多个对象,并标注…...
开源模型应用落地-FastAPI-助力模型交互-进阶篇(三)
一、前言 FastAPI 的高级用法可以为开发人员带来许多好处。它能帮助实现更复杂的路由逻辑和参数处理,使应用程序能够处理各种不同的请求场景,提高应用程序的灵活性和可扩展性。 在数据验证和转换方面,高级用法提供了更精细和准确的控制&#…...
机器人及其相关工科专业课程体系
机器人及其相关工科专业课程体系 前言传统工科专业机械工程自动化/控制工程计算机科学与技术 新兴工科专业智能制造人工智能机器人工程 总结Reference: 前言 机器人工程专业是一个多领域交叉的前沿学科,涉及自然科学、工程技术、社会科学、人文科学等相关学科的理论…...
C#数字医学影像系统(RIS/PACS)源码,Oracle数据库,C/S架构,运行稳定
数字医学影像系统(RIS/PACS)源码,三甲以下的医院都能满足。PACS 系统全套成品源码。 开发技术:C/S架构,C#开发语言,数据库服务器采用Oracle数据库。 医学影像存储与传输系统,融合了医学信息化…...
Spring-Boot基础--yaml
目录 Spring-Boot配置文件 注意: YAML简介 YAML基础语法 YAML:数据格式 YAML文件读取配置内容 逐个注入 批量注入 ConfigurationProperties 和value的区别 Spring-Boot配置文件 Spring-Boot中不用编写.xml文件,但是spring-Boot中还是存在.prope…...
淄博做网站推广公司/网络优化的工作内容
我们都知道 Order 是控制优先级的,越小优先级越高,那么问题来了,是控制什么的优先级呢(虽然不能太“杠”,但是个人认为有时候还是得咬文嚼字)。有博客(相关链接见文末)的说法是“注解…...
网站建设代理开发科技企业服务/长沙百度搜索网站排名
首先说一下坑的地方就是python2和python3的模块改变问题,当然精通python的可以略过。这个在网上百度一下吧,第二个是导入xlsx文件的时候需要xlrd模块,而这个模块最好跟着我下面的方法走,那个python2 就可以用我下边的脚本了。 1.安…...
bing网站收录/网站优化策略分析论文
简单的问答已经实现了,那么问题也跟着出现了,我不能确定问题一定是"你叫什么名字",也有可能是"你是谁","你叫啥"之类的,这就引出了人工智能中的另一项技术:自然语言处理(NLP) : 大概意思就是 让计算机明白一句话要表达的意思,NLP就相当于计算机在…...
新疆建设兵团一师网站/万网域名
本文章是❤️力扣 (LeetCode)❤️的内容,该专栏还有多篇优质内容在等待你观看,现在点击右上角点击这个————🚀订阅专栏🚀 🔆坚持刷算法 💎每天进步一点点 🚀冲冲冲冲冲冲冲冲冲冲 Ǵ…...
响应式网站建设报价单/市场营销策略有哪些
搜索单词 Windows: Ctrl F Mac : Cmd F 会在当前激活的文件上查询输入的关键字,以高亮显示 跳转行 Windows: Ctrl L Mac : Cmd L 比Eclipse更加细致,可以先输入行号,然后输入冒号,最后跟上字符的位置 Navig…...
长沙h5手机网站制作/seo系统
一、基础知识1、主要的数据库类型层次型数据库早期的数据库类型网状数据库关系型数据库对象-关系型图片存放路径,大段文本存放指针2. sqllit关系数据库接口,仅提供API。非c/s架构,也是关系型数据库。客户端与服务器端在一起,本地调…...