From 21a96cb08e2e023ec7b01be3e443108e3589ca6c Mon Sep 17 00:00:00 2001 From: xuhuajiao <13476289682@163.com> Date: Fri, 28 Mar 2025 17:16:17 +0800 Subject: [PATCH] =?UTF-8?q?bug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/utils/dialog/drag.js | 84 +++++++++++++++++++ src/utils/dialog/index.js | 12 +++ .../managementLibrary/mixins/index.js | 3 +- .../collectionLibrary/mixins/index.js | 3 +- .../module/collectHeader.vue | 5 ++ .../archivesCategory/fileNoFormat/index.vue | 15 +++- .../fileNoFormat/module/form.vue | 2 +- .../listBrowsing/module/form.vue | 16 +++- 8 files changed, 132 insertions(+), 8 deletions(-) create mode 100644 src/utils/dialog/drag.js create mode 100644 src/utils/dialog/index.js diff --git a/src/utils/dialog/drag.js b/src/utils/dialog/drag.js new file mode 100644 index 0000000..ca297b2 --- /dev/null +++ b/src/utils/dialog/drag.js @@ -0,0 +1,84 @@ +export default { + bind(el, binding, vnode) { + const dialogHeaderEl = el.querySelector('.el-dialog__header') + const dragDom = el.querySelector('.el-dialog') + dialogHeaderEl.style.cssText += ';cursor:move;' + + // 获取原有属性 ie dom元素.currentStyle 火狐谷歌 window.getComputedStyle(dom元素, null); + const getStyle = (function() { + if (window.document.currentStyle) { + return (dom, attr) => dom.currentStyle[attr] + } else { + return (dom, attr) => getComputedStyle(dom, false)[attr] + } + })() + + // 获取初始位置 + let initLeft = getStyle(dragDom, 'left') + let initTop = getStyle(dragDom, 'top') + if (initLeft.includes('%')) { + initLeft = +document.body.clientWidth * (+initLeft.replace(/%/g, '') / 100) + } else { + initLeft = +initLeft.replace(/\px/g, '') + } + if (initTop.includes('%')) { + initTop = +document.body.clientHeight * (+initTop.replace(/%/g, '') / 100) + } else { + initTop = +initTop.replace(/\px/g, '') + } + + // 考虑 transform 的影响 + const transform = getStyle(dragDom, 'transform') + const match = transform.match(/translate\((-?\d+(\.\d+)?%)?, (-?\d+(\.\d+)?%)?\)/) + let translateX = 0 + let translateY = 0 + if (match) { + translateX = +document.body.clientWidth * (+match[1].replace(/%/g, '') / 100) + translateY = +document.body.clientHeight * (+match[3].replace(/%/g, '') / 100) + } + + dialogHeaderEl.onmousedown = (e) => { + // 鼠标按下,计算当前元素距离可视区的距离 + const disX = e.clientX - dialogHeaderEl.offsetLeft + const disY = e.clientY - dialogHeaderEl.offsetTop + const dragDomWidth = dragDom.offsetWidth + const dragDomHeight = dragDom.offsetHeight + const screenWidth = document.body.clientWidth + const screenHeight = document.body.clientHeight + + // 计算边界 + const minDragDomLeft = -initLeft - translateX + const maxDragDomLeft = screenWidth - initLeft - dragDomWidth - translateX + const minDragDomTop = -initTop - translateY + const maxDragDomTop = screenHeight - initTop - dragDomHeight - translateY + + document.onmousemove = function(e) { + // 通过事件委托,计算移动的距离 + let left = e.clientX - disX + let top = e.clientY - disY + + // 边界处理 + if (left < minDragDomLeft) { + left = minDragDomLeft + } else if (left > maxDragDomLeft) { + left = maxDragDomLeft + } + if (top < minDragDomTop) { + top = minDragDomTop + } else if (top > maxDragDomTop) { + top = maxDragDomTop + } + + // 移动当前元素 + dragDom.style.cssText += `;left:${left + initLeft + translateX}px;top:${top + initTop + translateY}px;` + // emit onDrag event + vnode.child.$emit('dragDialog') + } + + document.onmouseup = function() { + document.onmousemove = null + document.onmouseup = null + } + } + } +} diff --git a/src/utils/dialog/index.js b/src/utils/dialog/index.js new file mode 100644 index 0000000..12854eb --- /dev/null +++ b/src/utils/dialog/index.js @@ -0,0 +1,12 @@ +import Vue from 'vue' +import drag from './drag' + +const install = function(Vue) { + Vue.directive('el-drag-dialog', drag) +} +if (window.Vue) { + window['el-drag-dialog'] = drag + Vue.use(install) +} +drag.install = install +export default drag diff --git a/src/views/archivesManage/managementLibrary/mixins/index.js b/src/views/archivesManage/managementLibrary/mixins/index.js index 618d3ae..218eb22 100644 --- a/src/views/archivesManage/managementLibrary/mixins/index.js +++ b/src/views/archivesManage/managementLibrary/mixins/index.js @@ -135,7 +135,8 @@ export const manageLibraryCrud = { 'categoryId': this.selectedCategory.id, 'categoryLevel': categoryLevel, 'ignore': false, - 'isdel': (this.parentsData.isdel && this.selectedCategory.arrangeType === 2 && categoryLevel === 3) ? false : this.parentsData.isdel, + // 'isdel': (this.parentsData.isdel && this.selectedCategory.arrangeType === 2 && categoryLevel === 3) ? false : this.parentsData.isdel, + 'isdel': this.parentsData.isdel === true ? this.parentsData.isdel : false, 'checkTypes': this.selectStatus && this.selectStatus.length !== 0 ? this.selectStatus.join(',') : null, 'search': this.query.search, 'retention': this.smartQuery.retention, diff --git a/src/views/collectReorganizi/collectionLibrary/mixins/index.js b/src/views/collectReorganizi/collectionLibrary/mixins/index.js index 6e27494..22b7214 100644 --- a/src/views/collectReorganizi/collectionLibrary/mixins/index.js +++ b/src/views/collectReorganizi/collectionLibrary/mixins/index.js @@ -133,7 +133,8 @@ export const collectionLibraryCrud = { 'categoryId': this.selectedCategory.id, 'categoryLevel': categoryLevel, 'ignore': false, - 'isdel': (this.parentsData.isdel && this.selectedCategory.arrangeType === 2 && categoryLevel === 3) ? false : this.parentsData.isdel, + // 'isdel': (this.parentsData.isdel && this.selectedCategory.arrangeType === 2 && categoryLevel === 3) ? false : this.parentsData.isdel, + 'isdel': this.parentsData.isdel === true ? this.parentsData.isdel : false, 'search': this.query.search, 'retention': this.smartQuery.retention, 'security_class': this.smartQuery.security_class, diff --git a/src/views/collectReorganizi/collectionLibrary/module/collectHeader.vue b/src/views/collectReorganizi/collectionLibrary/module/collectHeader.vue index 92c4c68..56dbe08 100644 --- a/src/views/collectReorganizi/collectionLibrary/module/collectHeader.vue +++ b/src/views/collectReorganizi/collectionLibrary/module/collectHeader.vue @@ -138,6 +138,7 @@ + @@ -355,9 +356,13 @@ import ArchivesFilling from './archivesFilling/index' import qs from 'qs' import { downloadFile, exportFile } from '@/utils/index' import { mapGetters } from 'vuex' +import elDragDialog from '@/utils/dialog' export default { name: 'CollectHeader', + directives: { + elDragDialog + }, components: { Treeselect, PreviewForm, UploadOriginal, BigUpload, BlukImport, BlukEditing, FileSeqAdjustment, CombineFile, InsertFile, CollectMoveFile, Print, FourTest, QuickPaper, PackingBox, ArchivesFilling }, mixins: [collectionLibraryCrud, crud()], props: { diff --git a/src/views/system/archivesCategory/fileNoFormat/index.vue b/src/views/system/archivesCategory/fileNoFormat/index.vue index 9feec02..252dd25 100644 --- a/src/views/system/archivesCategory/fileNoFormat/index.vue +++ b/src/views/system/archivesCategory/fileNoFormat/index.vue @@ -57,6 +57,7 @@