From 801bb13cadd66f9eb60fc917066751bd6672741b Mon Sep 17 00:00:00 2001
From: guoyujie <guoyujie@ng.com>
Date: 星期一, 01 十二月 2025 16:20:58 +0800
Subject: [PATCH] 提交合计相关字体大小

---
 north-glass-erp/northglass-erp/src/hook/mouseMove.ts |  575 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 575 insertions(+), 0 deletions(-)

diff --git a/north-glass-erp/northglass-erp/src/hook/mouseMove.ts b/north-glass-erp/northglass-erp/src/hook/mouseMove.ts
new file mode 100644
index 0000000..e3a88e8
--- /dev/null
+++ b/north-glass-erp/northglass-erp/src/hook/mouseMove.ts
@@ -0,0 +1,575 @@
+//榧犳爣婊戝姩閫変腑
+import {nextTick, ref,reactive} from "vue";
+import {ElMessage} from "element-plus";
+import {add} from "../utils/decimal"
+
+let isSelecting = ref(false) // 鏄惁姝e湪杩涜閫夋嫨鎿嶄綔,榛樿涓篺alse
+let selectionStart = reactive({ rowIndex: -1, cellIndex: -1 }) // 閫夋嫨鎿嶄綔璧峰鍗曞厓鏍间綅缃�
+let selectionEnd = reactive({ rowIndex: -1, cellIndex: -1 }) // 閫夋嫨鎿嶄綔缁撴潫鍗曞厓鏍间綅缃�
+let gridOptions =reactive({
+    rowConfig:{height:30}
+})
+//鑾峰彇椤甸潰ref鑺傜偣
+//鑾峰彇vxetable琛ㄦ牸鑺傜偣
+let xGrid = ref()
+let cellarea = ref(`
+    <div class="vxe-table--cell-area" style="font-size: 10px;text-align: left" >
+      <span class="vxe-table--cell-main-area" >
+        <p style="bottom: 0;color: blue;background-color: #5cadfe; margin-top: auto;font-size: 14px"></p>
+        </span>
+      <span class="vxe-table--cell-active-area"  ></span>
+    </div>
+`)
+let leftfixedcellarea = ref()
+let rightfixedcellarea = ref()
+const getTablexGrid = () => {
+    return xGrid.value
+}
+
+//娣诲姞浜嬩欢
+const addListener = (xGrids,gridOption) => {
+    xGrid.value = xGrids
+    gridOptions = gridOption
+    let newElement = document.createElement('div')
+    let leftElement = document.createElement('div')
+    const parser = new DOMParser();
+    const htmlDoc = parser.parseFromString(cellarea.value, 'text/html')
+    newElement.innerHTML = htmlDoc.body.innerHTML
+    leftElement.innerHTML = htmlDoc.body.innerHTML
+    //cellarea.value = newElement
+    //娣诲姞澶氶�夊垪
+    nextTick(() => {
+        window.addEventListener("keydown", ()=>{
+            destroyAreaBox()
+        })
+        window.addEventListener("mousedown", tableOutDestroyAreaBox)//缁檞indow娣诲姞榧犳爣鎸変笅浜嬩欢,鍒ゆ柇鏄惁鍦ㄨ〃鏍煎,鏄攢姣�
+        window.addEventListener("mouseup", tbodymouseup)//缁檞indow娣诲姞榧犳爣鏉惧紑浜嬩欢
+        let tbody = getTablexGrid().$el.querySelector(".vxe-table--main-wrapper table tbody")//鑾峰彇tbody鍖哄煙
+
+        if (tbody) {
+            tbody.addEventListener("mousedown", tbodymousedown)//缁欒〃鏍间腑鐨則body娣诲姞榧犳爣鎸変笅浜嬩欢
+            tbody.addEventListener("mousemove", tbodymousemove)//缁欒〃鏍间腑鐨則body娣诲姞榧犳爣绉诲姩浜嬩欢
+            tbody.addEventListener("mouseout", throttle(tbodymouseout, 50))//缁欒〃鏍间腑鐨則body娣诲姞榧犳爣绉诲嚭浜嬩欢
+            tbody.addEventListener("click", tableCellClick)//娣诲姞宸﹂敭鍗曞嚮浜嬩欢
+            //tbody.oncontextmenu = tableCellMenuClick//娣诲姞鍙抽敭鑿滃崟浜嬩欢
+        }
+        let bodyWrapper = getTablexGrid().$el.querySelector(".vxe-table--main-wrapper .vxe-table--body-wrapper")//鑾峰彇姝e父鍖哄煙鐨刡ody
+        if (bodyWrapper) {
+            //娉ㄦ剰杩欓噷鐨剅ef鍚嶇О锛岃繖閲屾槸闈瀎ixed鍖哄煙鐨勬鐨勫悕绉�
+            bodyWrapper.appendChild(newElement)//娣诲姞鑼冨洿妗嗗厓绱�
+            // let geticon = document.getElementById("getIcon")
+            // geticon.addEventListener("click", ()=>{
+            //     alert(2)
+            // })
+
+        }
+        setTimeout(() => {
+            //#region 宸︿晶鍥哄畾鍒�
+            let leftfixedtbody = getTablexGrid().$el.querySelector(".vxe-table--fixed-wrapper .vxe-table--fixed-left-wrapper .vxe-table--body-wrapper table tbody")//鑾峰彇fixedtbody鍖哄煙
+
+            if (leftfixedtbody) {
+                leftfixedtbody.addEventListener("mousedown", tbodymousedown)//缁欒〃鏍间腑鐨刲eftfixedtbody娣诲姞榧犳爣鎸変笅浜嬩欢
+                leftfixedtbody.addEventListener("mousemove", tbodymousemove)//缁欒〃鏍间腑鐨刲eftfixedtbody娣诲姞榧犳爣绉诲姩浜嬩欢
+                leftfixedtbody.addEventListener("mouseout", throttle(tbodymouseout, 50))//缁欒〃鏍间腑鐨刲eftfixedtbody娣诲姞榧犳爣绉诲嚭浜嬩欢
+                leftfixedtbody.addEventListener("click", tableCellClick)//娣诲姞鍗曞嚮浜嬩欢
+                //leftfixedtbody.oncontextmenu = tableCellMenuClick//娣诲姞鍙抽敭鑿滃崟浜嬩欢
+            }
+
+            let leftFixedBodyWrapper = getTablexGrid().$el.querySelector(".vxe-table--fixed-wrapper .vxe-table--fixed-left-wrapper .vxe-table--body-wrapper")
+            if (leftFixedBodyWrapper) {
+                //娉ㄦ剰杩欓噷鐨剅ef鍚嶇О锛岃繖閲屾槸fixed鍖哄煙鐨勬鐨勫悕绉�
+                leftFixedBodyWrapper.appendChild(leftElement)
+            }
+            //#endregion
+
+            //#region 鍙充晶鍥哄畾鍒�
+           /* let rightfixedtbody = getTablexGrid().$el.querySelector(".vxe-table--fixed-wrapper .vxe-table--fixed-right-wrapper .vxe-table--body-wrapper table tbody")//鑾峰彇fixedtbody鍖哄煙
+
+            if (rightfixedtbody) {
+                rightfixedtbody.addEventListener("mousedown", tbodymousedown)//缁欒〃鏍间腑鐨剅ightfixedtbody娣诲姞榧犳爣鎸変笅浜嬩欢
+                rightfixedtbody.addEventListener("mousemove", tbodymousemove)//缁欒〃鏍间腑鐨剅ightfixedtbody娣诲姞榧犳爣绉诲姩浜嬩欢
+                rightfixedtbody.addEventListener("mouseout", throttle(tbodymouseout, 50))//缁欒〃鏍间腑鐨剅ightfixedtbody娣诲姞榧犳爣绉诲嚭浜嬩欢
+                rightfixedtbody.addEventListener("click", tableCellClick)//娣诲姞鍗曞嚮浜嬩欢
+                rightfixedtbody.oncontextmenu = tableCellMenuClick//娣诲姞鍙抽敭鑿滃崟浜嬩欢
+            }
+
+            let rightFixedBodyWrapper = getTablexGrid().$el.querySelector(".vxe-table--fixed-wrapper .vxe-table--fixed-right-wrapper .vxe-table--body-wrapper")
+            if (rightFixedBodyWrapper) {
+                //娉ㄦ剰杩欓噷鐨剅ef鍚嶇О锛岃繖閲屾槸fixed鍖哄煙鐨勬鐨勫悕绉�
+                rightFixedBodyWrapper.appendChild(rightfixedcellarea.value)
+            }*/
+            //#endregion
+
+        }, 100)
+
+    })
+}
+
+//榧犳爣鎸変笅浜嬩欢
+const tbodymousedown = (event: MouseEvent) => {
+    event.stopPropagation()//闃绘鍐掓场
+    getTablexGrid().closeMenu()//鎵嬪姩鍏抽棴鍙抽敭鑿滃崟
+    //宸﹂敭0,涓敭1,鍙抽敭2
+    if (event.button === 0) {//宸﹂敭鎸変笅
+        // 璁板綍閫夋嫨鎿嶄綔璧峰浣嶇疆
+        selectionStart = getCellPosition(event.target)//璁剧疆閫夋嫨鎿嶄綔璧峰鍗曞厓鏍间綅缃�
+        selectionEnd = selectionStart
+        const activeElement = getTablexGrid().$el.querySelector(".vxe-table--main-wrapper .vxe-table--body-wrapper .vxe-table--cell-main-area p")
+        const element = xGrid.value.$el.querySelector(".vxe-table--fixed-wrapper .vxe-table--fixed-left-wrapper .vxe-table--body-wrapper .vxe-table--cell-main-area p")
+        activeElement.innerHTML =''
+        if(element){
+            element.innerHTML =''
+        }
+
+
+        isSelecting.value = true//鏍囪涓烘鍦ㄩ�夋嫨鎿嶄綔
+    }
+}
+
+//榧犳爣绉诲姩浜嬩欢
+//todo 杩欓噷瑕佽妭娴佹搷浣�,鍙湪缁撴潫鏃惰Е鍙戜竴娆�
+const tbodymousemove = (event: MouseEvent) => {
+    if (event.button === 0) {//宸﹂敭绉诲姩
+        if (!isSelecting.value) return//濡傛灉褰撳墠闈炴鍦ㄩ�夋嫨鎿嶄綔,鐩存帴閫�鍑�
+        //璁板綍閫夋嫨鎿嶄綔缁撴潫浣嶇疆
+        selectionEnd = getCellPosition(event.target)
+
+        //璁剧疆鏍峰紡,骞舵樉绀鸿寖鍥存
+        setselectedCellArea()
+
+    }
+}
+
+//榧犳爣鎸夐敭缁撴潫浜嬩欢,娣诲姞鍦ㄤ簡window涓�
+const tbodymouseup = (event: MouseEvent) => {
+    if (event.button === 0) {//宸﹂敭鏉惧紑
+        isSelecting.value = false//鏍囪涓哄仠姝㈤�夋嫨鎿嶄綔
+    }
+    const result = exportData()
+    if(!result){
+        return
+    }
+    const activeElement = getTablexGrid().$el.querySelector(".vxe-table--main-wrapper .vxe-table--body-wrapper .vxe-table--cell-main-area p")
+    const element = xGrid.value.$el.querySelector(".vxe-table--fixed-wrapper .vxe-table--fixed-left-wrapper .vxe-table--body-wrapper .vxe-table--cell-main-area p")
+
+
+    if(result.length<=2 && result[0].length===1){
+        activeElement.innerHTML =''
+        if(element){
+            element.innerHTML =''
+        }
+
+        return
+    }
+    let sum = 0
+
+    result.forEach((item,index) => {
+        if(index>0){
+            const val = isNaN(item[0])?0:item[0]
+            sum = Number(add(sum, (val || 0)))
+        }
+    })
+
+    sum=isNaN(sum)?0:sum
+    setTimeout(()=>{
+        activeElement.innerHTML ="SUM:"+sum
+        if(element){
+            element.innerHTML ="SUM:"+sum
+        }
+
+    },200)
+
+}
+
+let outevent = ref()//绉诲姩浜嬩欢,涓嶄繚瀛�,寰幆瀹氭椂鍣ㄥ唴鏃犳硶鐩戝惉鍒版柊鐨勪簨浠�
+
+//榧犳爣绉诲嚭琛ㄦ牸浜嬩欢,鍙湪绉诲姩鐨勬椂鍊欎細瑙﹀彂,鏆傚仠绉诲姩涓嶈Е鍙�
+const tbodymouseout = (event: MouseEvent) => {
+    outevent.value = event//淇濆瓨绉诲姩浜嬩欢
+
+    if (isSelecting.value) {//濡傛灉姝e湪鎵ц閫変腑鎿嶄綔
+        const timer = setInterval(() => {//寮�鍚惊鐜畾鏃跺櫒
+            if (isSelecting.value) {//鍒ゆ柇褰撳墠鏄惁姝e湪閫夋嫨
+                //鑾峰彇琛ㄦ牸鍏冪礌
+                var table = getTablexGrid().$el.querySelector(".vxe-table--body-wrapper table")//鑾峰彇闈炲浐瀹氬垪(鍜屽浐瀹氬垪)鐨則able鍏冪礌
+                if (outevent.value.clientX > table.parentElement.getBoundingClientRect().right - 30) {//鍒ゆ柇榧犳爣x杞存槸鍚﹁秴鍑鸿〃鏍煎彸渚�,鍚戝彸婊氬姩
+                    var maxScrollPosition = table.parentElement.scrollWidth - table.parentElement.clientWidth//鑾峰彇婊氬姩鏉℃渶澶т綅缃�
+                    if (table.parentElement.scrollLeft < maxScrollPosition) {//濡傛灉娌″埌婊氬姩鏉℃渶澶т綅缃�,鎵ц婊氬姩
+                        table.parentElement.scrollLeft += 10//鎵ц姘村钩婊氬姩鏉″悜鍙虫粴鍔�
+                    }
+                } else if (outevent.value.clientX < table.parentElement.getBoundingClientRect().left + 30) {//鍒ゆ柇榧犳爣x杞存槸鍚﹁秴鍑鸿〃鏍煎乏渚�,鍚戝乏婊氬姩
+                    if (table.parentElement.scrollLeft > 0) {//濡傛灉娌″埌婊氬姩鏉℃渶澶т綅缃�,鎵ц婊氬姩
+                        //榧犳爣绉诲嚭琛ㄦ牸锛屾粴鍔ㄦ按骞虫粴鍔ㄦ潯
+                        table.parentElement.scrollLeft -= 10//鎵ц姘村钩婊氬姩鏉″悜鍙虫粴鍔�
+                    }
+                }
+
+
+            } else {
+                clearInterval(timer)//娓呴櫎寰幆瀹氭椂鍣�
+            }
+        }, 200)//杩欓噷璁剧疆婊戝姩閫熷害
+
+    }
+
+}
+
+//鑺傛祦鍑芥暟,todo//鏀逛负鍏ㄥ眬
+const throttle = (fn: Function, delay: number) => {
+    const canRun = ref(true)
+    return (...args: any[]) => {
+        if (!canRun.value) return
+        canRun.value = false
+        setTimeout(() => {
+            fn(...args)
+            canRun.value = true
+        }, delay)
+    }
+}
+
+// 鑾峰彇鍗曞厓鏍间綅缃�(rowIndex, cellIndex)
+const getCellPosition = (cell: any) => {
+
+
+    while (cell.tagName !== 'TD') {//灏哻ell鎸囧悜TD鍏冪礌
+        cell = cell.parentElement
+    }
+
+    let visibleColumn = getTablexGrid().getTableColumn().visibleColumn//鑾峰彇澶勭悊鏉′欢涔嬪悗鐨勫叏閲忚〃澶村垪
+    const cellIndex = visibleColumn.findIndex((col: { id: any; }) => {//杩斿洖colid鐩哥瓑鐨剉isibleColumn鍏ㄩ噺琛ㄥご鍒楃殑绱㈠紩
+        return col.id == cell.getAttribute("colid")
+    })
+
+    let visibleData = getTablexGrid().getTableData().visibleData//鑾峰彇澶勭悊鏉′欢涔嬪悗鐨勫叏閲忚〃浣撴暟鎹�
+
+    const rowIndex = visibleData.findIndex((row: { _X_ROW_KEY: any; }) => {//杩斿洖rowid鐩哥瓑鐨剉isibleData鍏ㄩ噺琛ㄤ綋鏁版嵁
+        return row._X_ROW_KEY == cell.parentElement.getAttribute("rowid")//杩斿洖rowid鐩哥瓑鐨剉isibleData鍏ㄩ噺琛ㄤ綋鏁版嵁鐨勭储寮�
+    })
+    return { rowIndex, cellIndex }
+
+}
+
+//璁剧疆妗嗘墦寮�
+const setselectedCellArea = () => {
+    var activeElement = getTablexGrid().$el.querySelector(".vxe-table--main-wrapper .vxe-table--body-wrapper .vxe-table--cell-active-area")//姝e父鍖哄煙閫変腑杈规婵�娲荤殑鍏冪礌(浠呮槸杈规)
+    var mainElement = getTablexGrid().$el.querySelector(".vxe-table--main-wrapper .vxe-table--body-wrapper .vxe-table--cell-main-area")//姝e父鍖哄煙閫変腑杈规鍐呮暣涓寖鍥寸殑鍏冪礌
+
+    var leftFixedActiveElement = getTablexGrid().$el.querySelector(".vxe-table--fixed-wrapper .vxe-table--fixed-left-wrapper .vxe-table--body-wrapper .vxe-table--cell-active-area")//宸︿晶鍥哄畾鍒楅�変腑杈规婵�娲荤殑鍏冪礌(浠呮槸杈规)
+    var leftFixedMainElement = getTablexGrid().$el.querySelector(".vxe-table--fixed-wrapper .vxe-table--fixed-left-wrapper .vxe-table--body-wrapper .vxe-table--cell-main-area")//宸︿晶鍥哄畾鍒楅�変腑杈规鍐呮暣涓寖鍥寸殑鍏冪礌
+
+    var rightFixedActiveElement = getTablexGrid().$el.querySelector(".vxe-table--fixed-wrapper .vxe-table--fixed-right-wrapper .vxe-table--body-wrapper .vxe-table--cell-active-area")//鍙充晶鍥哄畾鍒楅�変腑杈规婵�娲荤殑鍏冪礌(浠呮槸杈规)
+    var rightFixedMainElement = getTablexGrid().$el.querySelector(".vxe-table--fixed-wrapper .vxe-table--fixed-right-wrapper .vxe-table--body-wrapper .vxe-table--cell-main-area")//鍙充晶鍥哄畾鍒楅�変腑杈规鍐呮暣涓寖鍥寸殑鍏冪礌
+
+
+    var elements = [activeElement, mainElement, leftFixedActiveElement, leftFixedMainElement, rightFixedActiveElement, rightFixedMainElement]
+    let area = getAreaBoxPosition()
+    if (area) {
+        var { width, height, left, top, right } = area
+    } else {
+        return
+    }
+    elements.forEach((element, index) => {
+        if (element) {//璁剧疆鏄剧ず鑼冨洿妗嗙殑鍐呴儴鍏冪礌鐨勬牱寮�
+            element.style.width = `${width}px`
+            element.style.height = `${height}px`
+            element.style.top = `${top}px`
+            element.style.display = "block"
+            if(index%2==1){
+                element.style.display = "flex"
+                element.style.flexDirection = 'column'
+            }
+
+            if (index <= elements.length - 1 - 2) {//濡傛灉涓嶆槸rightFixedActiveElement鎴杛ightFixedMainElement
+                element.style.left = `${left}px`
+            } else {
+                element.style.right = `${right}px`
+            }
+        }
+    })
+
+    //鏄剧ず鑼冨洿妗�
+    openAreaBox()
+}
+
+//鏍规嵁寮�濮嬩綅缃拰缁撴潫浣嶇疆鐨勭储寮曡绠楁鐨剋idth,height,left,top(宸︿晶鍥哄畾鍒楀拰姝e父鍖哄煙鍜屽彸渚у浐瀹氬垪浣跨敤)
+const getAreaBoxPosition = () => {
+    let startRowIndex = selectionStart.rowIndex//鑾峰彇閫変腑璧峰琛岀储寮�
+    let endRowIndex = selectionEnd.rowIndex//鑾峰彇閫変腑缁撴潫琛岀储寮�
+    let startColumnIndex = selectionStart.cellIndex//鑾峰彇閫変腑璧峰鍒楃储寮�
+    let endColumnIndex = selectionEnd.cellIndex//鑾峰彇閫変腑缁撴潫鍒楃储寮�
+    let visibleColumn = getTablexGrid().getTableColumn().visibleColumn//鑾峰彇澶勭悊鏉′欢涔嬪悗鐨勫叏閲忚〃澶村垪
+    let visibleData = getTablexGrid().getTableData().visibleData//鑾峰彇澶勭悊鏉′欢涔嬪悗鐨勫叏閲忚〃浣撴暟鎹�
+    if (startColumnIndex < 0 || endColumnIndex < 0 || startRowIndex < 0 || endRowIndex < 0) return
+    var maxColumnIndex = visibleColumn.length - 1//鏈�澶у垪绱㈠紩
+    var maxRowIndex = visibleData.length - 1//鏈�澶ц绱㈠紩
+    if (endColumnIndex > maxColumnIndex) {//鍒版渶鍚庝竴鍒�,鎸囧悜鏈�鍚庝竴鍒�
+        endColumnIndex = maxColumnIndex
+    }
+    if (endRowIndex > maxRowIndex) {//鍒版渶鍚庝竴琛�,鎸囧悜鏈�鍚庝竴琛�
+        endRowIndex = maxRowIndex
+    }
+    let width = 0, height = 0, left = 0, top = 0, right = 0
+    visibleColumn.forEach((col: { renderWidth: number; }, index: number) => {
+        if (startColumnIndex <= endColumnIndex) {//寮�濮嬪垪绱㈠紩灏忎簬缁撴潫鍒楃储寮�,鍗充粠宸﹀線鍙抽�夋嫨
+            if (index < startColumnIndex) {
+                left += col.renderWidth//璺濈琛ㄦ牸鏁翠綋宸︿晶杈规璺濈
+            }
+            if (index > endColumnIndex) {//鏁版嵁绱㈠紩澶т簬缁撴潫鍒�,杩欓噷鑾峰彇璺濈鍚庨潰鏁版嵁鐨勫搴�
+                right += col.renderWidth//璺濈琛ㄦ牸鏁翠綋鍙充晶杈规璺濈,鍔犱笂褰撳墠鍒�
+            }
+            if (startColumnIndex <= index && index <= endColumnIndex) {//寮�濮嬪垪绱㈠紩澶т簬鏁版嵁绱㈠紩 鍜� 缁撴潫鍒楃储寮曞皬浜庢暟鎹储寮�,杩欓噷鑾峰彇閫変腑鍖哄煙鐨勫搴�
+                width += col.renderWidth//閫変腑鍖哄煙鐨勫搴�
+            }
+        } else {//浠庡彸寰�宸﹂�夋嫨
+            if (index < endColumnIndex) {
+                left += col.renderWidth//璺濈琛ㄦ牸鏁翠綋宸︿晶杈规璺濈
+            }
+            if (index > startColumnIndex) {//鏁版嵁绱㈠紩澶т簬寮�濮嬪垪,杩欓噷鑾峰彇璺濈鍚庨潰鏁版嵁鐨勫搴�
+                right += col.renderWidth//璺濈琛ㄦ牸鏁翠綋鍙充晶杈规璺濈,鍔犱笂褰撳墠鍒�
+            }
+            if (startColumnIndex >= index && index >= endColumnIndex) {//寮�濮嬪垪绱㈠紩澶т簬鏁版嵁绱㈠紩 鍜� 缁撴潫鍒楃储寮曞皬浜庢暟鎹储寮�,杩欓噷鑾峰彇閫変腑鍖哄煙鐨勫搴�
+                width += col.renderWidth//閫変腑鍖哄煙鐨勫搴�
+            }
+        }
+
+    })
+    if (startRowIndex <= endRowIndex) {//寮�濮嬭绱㈠紩灏忎簬缁撴潫琛岀储寮�,鍗充粠涓婂線涓嬮�夋嫨
+        height = (endRowIndex - startRowIndex + 1) * gridOptions.rowConfig!.height!//閫変腑鍖哄煙鐨勯珮搴�
+            top = startRowIndex * gridOptions.rowConfig!.height!//璺濈琛ㄦ牸鏁翠綋椤堕儴杈规璺濈
+    } else {
+        height = (startRowIndex - endRowIndex + 1) * gridOptions.rowConfig!.height!//閫変腑鍖哄煙鐨勯珮搴�
+            top = endRowIndex * gridOptions.rowConfig!.height!//璺濈琛ㄦ牸鏁翠綋椤堕儴杈规璺濈
+    }
+
+
+
+    return { width, height, left, top, right }
+
+}
+
+//鏄剧ず鑼冨洿妗�
+const openAreaBox = () => {
+    let element = xGrid.value.$el.querySelector(".vxe-table--main-wrapper .vxe-table--body-wrapper .vxe-table--cell-area")
+    if (element) {
+        element.style.display = "block"
+    }
+    element = xGrid.value.$el.querySelector(".vxe-table--fixed-wrapper .vxe-table--fixed-left-wrapper .vxe-table--body-wrapper .vxe-table--cell-area")
+    if (element) {
+        element.style.display = "block"
+    }
+    element = xGrid.value.$el.querySelector(".vxe-table--fixed-wrapper .vxe-table--fixed-right-wrapper .vxe-table--body-wrapper .vxe-table--cell-area")
+    if (element) {
+        element.style.display = "block"
+    }
+}
+
+
+//琛ㄦ牸澶栭攢姣佽寖鍥存
+const tableOutDestroyAreaBox = (event: MouseEvent) => {
+    var element = getTablexGrid().$el.querySelector(".vxe-table--render-wrapper")
+    if (element) {
+        if (event.clientX < element.getBoundingClientRect().left || event.clientX > element.getBoundingClientRect().right
+            || event.clientY > element.getBoundingClientRect().top || event.clientY < element.getBoundingClientRect().bottom
+        ) {
+            destroyAreaBox()
+        }
+    }
+
+
+
+}
+
+//閿�姣佽寖鍥存
+const destroyAreaBox = () => {
+    var element = getTablexGrid().$el.querySelector(".vxe-table--main-wrapper .vxe-table--body-wrapper .vxe-table--cell-area")
+    if (element) {
+        element.style.display = "none"
+    }
+    element = getTablexGrid().$el.querySelector(".vxe-table--fixed-wrapper .vxe-table--fixed-left-wrapper .vxe-table--body-wrapper .vxe-table--cell-area")
+    if (element) {
+        element.style.display = "none"
+    }
+    element = getTablexGrid().$el.querySelector(".vxe-table--fixed-wrapper .vxe-table--fixed-right-wrapper .vxe-table--body-wrapper .vxe-table--cell-area")
+    if (element) {
+        element.style.display = "none"
+    }
+}
+
+//琛ㄦ牸鍗曞厓鏍肩偣鍑讳簨浠�
+const tableCellClick = (e: MouseEvent) => {
+
+    if (!isSelecting.value) {//闈為�変腑鐘舵��
+        try {
+            selectionStart = getCellPosition(e.target)//鑾峰彇鍗曞厓鏍间綅缃�
+            selectionEnd = selectionStart//缁撴潫浣嶇疆涔熸槸鑷繁
+            //璁剧疆鏍峰紡
+            setselectedCellArea()
+        } catch (error) {
+
+        }
+
+    }
+}
+
+//琛ㄦ牸鍙抽敭鐐瑰嚮浜嬩欢
+const tableCellMenuClick = (e: MouseEvent) => {
+    if (!isSelecting.value) {//闈為�変腑鐘舵��
+        let currentCellPosition = getCellPosition(e.target)//鑾峰彇鍗曞厓鏍间綅缃�
+        var horizontalFlag//鏄惁鍦ㄨ寖鍥存鐨勬按骞冲垽鏂爣璁�
+        var verticalFlag//鏄惁鍦ㄨ寖鍥存鐨勫瀭鐩村垽鏂爣璁�
+        if (selectionStart.cellIndex <= selectionEnd.cellIndex) {//濡傛灉鏄粠宸﹀線鍙抽�夊彇
+            horizontalFlag = selectionStart.cellIndex <= currentCellPosition.cellIndex && currentCellPosition.cellIndex <= selectionEnd.cellIndex
+        } else {//浠庡彸寰�宸﹂�夊彇
+            horizontalFlag = selectionEnd.cellIndex <= currentCellPosition.cellIndex && currentCellPosition.cellIndex <= selectionStart.cellIndex
+        }
+        if (selectionStart.rowIndex <= selectionEnd.rowIndex) {//濡傛灉鏄粠涓婂線涓嬮�夊彇
+            verticalFlag = selectionStart.rowIndex <= currentCellPosition.rowIndex && currentCellPosition.rowIndex <= selectionEnd.rowIndex
+        } else {//浠庝笅寰�涓婇�夊彇
+            verticalFlag = selectionEnd.rowIndex <= currentCellPosition.rowIndex && currentCellPosition.rowIndex <= selectionStart.rowIndex
+        }
+
+        if (horizontalFlag && verticalFlag) { //鍒ゆ柇濡傛灉涓嶅湪閫変腑鍖哄煙鍐�,瑙﹀彂琛ㄦ牸宸﹂敭鍗曞嚮浜嬩欢,鏇存柊鎴彇鍗曞厓鏍�,鍚﹀垯濡傛灉鍦ㄦ甯歌Е鍙戝彸閿彍鍗�
+
+        } else {
+            selectionStart = getCellPosition(e.target)//鑾峰彇鍗曞厓鏍间綅缃�
+            selectionEnd = selectionStart//缁撴潫浣嶇疆涔熸槸鑷繁
+            //璁剧疆鏍峰紡
+            setselectedCellArea()
+        }
+
+    }
+
+}
+
+const toolbarButtonClickEvent = () => {
+
+            // //鎴戠粰澶у鎵撳嵃澶勭悊:
+            // console.log("鏄惁姝e湪杩涜婊戝姩閫変腑鎿嶄綔锛�", isSelecting.value)
+            // //宸︿笂瑙掑潗鏍�
+            // console.log("鍗曞厓鏍艰捣濮嬩綅缃細绱㈠紩:", selectionStart)
+            // //鍙充笅瑙掑潗鏍�
+            // console.log("鍗曞厓鏍肩粨鏉熶綅缃細绱㈠紩:", selectionEnd)
+            if (selectionStart.cellIndex!==selectionEnd.cellIndex){
+                ElMessage.warning("璇烽�夋嫨鐩稿悓涓�鍒�")
+                return false
+            }
+
+
+            // //杩欓噷闇�瑕佹槸visibleData
+            let tableData = getTablexGrid().getTableData().visibleData//鑾峰彇澶勭悊鏉′欢涔嬪悗鐨勫叏閲忚〃浣撴暟鎹�
+            let rowStart = selectionStart.rowIndex//鑾峰彇閫変腑璧峰琛岀储寮�
+            let rowEnd = selectionEnd.rowIndex//鑾峰彇閫変腑缁撴潫琛岀储寮�
+            let selectRows = tableData.filter((col, index: number) => {//col鍙傛暟涓嶈兘鏀瑰惁鍒欎細鑾峰彇涓嶅埌鏁版嵁
+                //杩欓噷淇敼浠庡彸涓嬪線宸︿笂鎷栧姩鐨勬暟鎹樉绀�
+                if (rowStart <= rowEnd) {
+                    return rowStart <= index && rowEnd >= index
+                } else {
+                    return rowStart >= index && rowEnd <= index
+                }
+            })
+            // console.log("榧犳爣閫変腑琛�:", JSON.stringify(selectRows))
+
+            //杩欓噷闇�瑕佹槸visibleColumn
+            let colStart = selectionStart.cellIndex//鑾峰彇閫変腑璧峰鍒楃储寮�
+            let colEnd = selectionEnd.cellIndex//鑾峰彇閫変腑缁撴潫鍒楃储寮�
+            let tableColumn = getTablexGrid().getTableColumn().visibleColumn//鑾峰彇澶勭悊鏉′欢涔嬪悗鐨勫叏閲忚〃澶村垪
+            let selectCols = tableColumn.filter((col, index: number) => {//col鍙傛暟涓嶈兘鏀瑰惁鍒欎細鑾峰彇涓嶅埌鏁版嵁
+                //杩欓噷淇敼浠庡彸涓嬪線宸︿笂鎷栧姩鐨勬暟鎹樉绀�
+                if (colStart <= colEnd) {
+                    return colStart <= index && colEnd >= index
+                } else {
+                    return colStart >= index && colEnd <= index
+                }
+            })
+
+
+            let result=null
+            if(selectRows.length===0){
+                return false
+            }
+            result =  {
+                start:selectionStart.rowIndex,//寮�濮嬭
+                end: selectionEnd.rowIndex,//缁撴潫琛�
+                cell:selectCols[0].field,//閫変腑鍒楋紝
+                row:selectRows
+            }
+
+            selectionStart.rowIndex=-1
+            selectionStart.cellIndex=-1
+            selectionEnd.rowIndex=-1
+            selectionEnd.cellIndex=-1
+
+            return  result
+            //console.log("榧犳爣閫変腑鍒�:", JSON.stringify(selectCols))
+
+
+}
+const exportData = () => {
+    let data = []
+    let title = []
+    try{
+    // //杩欓噷闇�瑕佹槸visibleData
+    if(getTablexGrid().getTableData()?.visibleData===undefined){
+        return null
+    }
+    let tableData = getTablexGrid().getTableData().visibleData//鑾峰彇澶勭悊鏉′欢涔嬪悗鐨勫叏閲忚〃浣撴暟鎹�
+    let rowStart = selectionStart.rowIndex//鑾峰彇閫変腑璧峰琛岀储寮�
+    let rowEnd = selectionEnd.rowIndex//鑾峰彇閫変腑缁撴潫琛岀储寮�
+    let selectRows = tableData.filter((col, index: number) => {//col鍙傛暟涓嶈兘鏀瑰惁鍒欎細鑾峰彇涓嶅埌鏁版嵁
+        //杩欓噷淇敼浠庡彸涓嬪線宸︿笂鎷栧姩鐨勬暟鎹樉绀�
+        if (rowStart <= rowEnd) {
+            return rowStart <= index && rowEnd >= index
+        } else {
+            return rowStart >= index && rowEnd <= index
+        }
+    })
+
+    //杩欓噷闇�瑕佹槸visibleColumn
+    let colStart = selectionStart.cellIndex//鑾峰彇閫変腑璧峰鍒楃储寮�
+    let colEnd = selectionEnd.cellIndex//鑾峰彇閫変腑缁撴潫鍒楃储寮�
+    let tableColumn = getTablexGrid().getTableColumn().visibleColumn//鑾峰彇澶勭悊鏉′欢涔嬪悗鐨勫叏閲忚〃澶村垪
+    let selectCols = tableColumn.filter((col, index: number) => {//col鍙傛暟涓嶈兘鏀瑰惁鍒欎細鑾峰彇涓嶅埌鏁版嵁
+        //杩欓噷淇敼浠庡彸涓嬪線宸︿笂鎷栧姩鐨勬暟鎹樉绀�
+        if (colStart <= colEnd) {
+            return colStart <= index && colEnd >= index
+        } else {
+            return colStart >= index && colEnd <= index
+        }
+    })
+
+    selectCols.forEach((col, index) => {
+        title.push(col['title'])
+    })
+    data.push(title)
+
+    selectRows.forEach((row, index) => {
+        let rowData = []
+        selectCols.forEach((col, index) => {
+
+            const parts = col['property'].split('.')
+            let result = row
+            for (const part of parts) {
+                if (result && result[part] !== undefined) {
+                    result = result[part];
+                } else {
+                    return null;
+                }
+            }
+            rowData.push(result)
+        })
+        data.push(rowData)
+    })
+    }catch (e) {
+        // selectionStart = { rowIndex: -1, cellIndex: -1 } // 閫夋嫨鎿嶄綔璧峰鍗曞厓鏍间綅缃�
+        // selectionEnd = { rowIndex: -1, cellIndex: -1 }
+    }
+
+    return  data
+
+}
+export {
+    addListener,
+    toolbarButtonClickEvent,
+    exportData,
+    destroyAreaBox
+}
\ No newline at end of file

--
Gitblit v1.8.0