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