| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- import Vue from 'vue';
- // 输入的只能是数字
- Vue.directive('numericOnly', {
- bind(el) {
- // 找到 el 下的 input 标签
- const input = el.tagName === 'INPUT' ? el : el.querySelector('input');
- input.addEventListener('input', (e) => {
- // 如果输入的不是数字,则替换为空
- e.target.value = e.target.value.replace(/[^\d]/g, '');
- });
- },
- });
- /**
- * el-dialog 组件拖拽指令
- */
- Vue.directive('dialogDrag', {
- bind(el) {
- const dialog = el.querySelector('.el-dialog');
- const header = el.querySelector('.el-dialog__header');
- if (!dialog || !header) return;
- header.style.cursor = 'move';
- const resetPosition = () => {
- dialog.style.left = '';
- dialog.style.top = '';
- dialog.style.position = '';
- dialog.style.margin = '';
- };
- // 当对话框隐藏时重置其位置
- const observer = new MutationObserver(() => {
- const isHidden = window.getComputedStyle(el).display === 'none';
- if (isHidden) resetPosition();
- });
- // 监听 el 的 style 和 class 属性变化,以检测对话框的显示状态
- observer.observe(el, {
- attributes: true,
- attributeFilter: ['style'],
- });
- el.__dialogDragCleanup__ = () => observer.disconnect();
- header.onmousedown = (e) => {
- const startX = e.clientX;
- const startY = e.clientY;
- const rect = dialog.getBoundingClientRect();
- const startLeft = rect.left;
- const startTop = rect.top;
- const onMouseMove = (moveEvent) => {
- const dx = moveEvent.clientX - startX;
- const dy = moveEvent.clientY - startY;
- dialog.style.margin = 0;
- dialog.style.left = `${startLeft + dx}px`;
- dialog.style.top = `${startTop + dy}px`;
- dialog.style.position = 'fixed';
- };
- const onMouseUp = () => {
- document.removeEventListener('mousemove', onMouseMove);
- document.removeEventListener('mouseup', onMouseUp);
- };
- document.addEventListener('mousemove', onMouseMove);
- document.addEventListener('mouseup', onMouseUp);
- };
- },
- unbind(el) {
- // 清理事件监听器和观察者
- if (el.__dialogDragCleanup__) {
- el.__dialogDragCleanup__();
- delete el.__dialogDragCleanup__;
- }
- },
- });
|