From 4cb838d8dcef8e7175b65dcf13688a17f448039a Mon Sep 17 00:00:00 2001 From: wisonic-s Date: Wed, 13 Mar 2024 14:26:55 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E8=A7=86=E5=9B=BE):=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E8=A1=A8=E6=A0=BC=E5=9C=A8=20http=20=E7=8E=AF=E5=A2=83?= =?UTF-8?q?=E4=B8=8B=E6=97=A0=E6=B3=95=E5=A4=8D=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/views/chart/chart/common/common.js | 25 ++++++++++++++++ .../src/views/chart/chart/table/table-info.js | 11 +++++-- .../chart/components/table/TableNormal.vue | 29 ++++++++++++++++++- 3 files changed, 61 insertions(+), 4 deletions(-) diff --git a/core/frontend/src/views/chart/chart/common/common.js b/core/frontend/src/views/chart/chart/common/common.js index 18e2e4d92d..8666942218 100644 --- a/core/frontend/src/views/chart/chart/common/common.js +++ b/core/frontend/src/views/chart/chart/common/common.js @@ -1,6 +1,8 @@ import { hexColorToRGBA } from '@/views/chart/chart/util' import { DEFAULT_XAXIS_STYLE, DEFAULT_YAXIS_EXT_STYLE, DEFAULT_YAXIS_STYLE } from '@/views/chart/chart/chart' import { formatterItem, valueFormatter } from '@/views/chart/chart/formatter' +import { $success } from '@/utils/message' +import i18n from '@/lang' export function componentStyle(chart_option, chart) { let xAxisLabelFormatter = null @@ -398,3 +400,26 @@ export const reverseColor = colorValue => { const str = '000000' + (0xFFFFFF - colorValue).toString(16) return '#' + str.substring(str.length - 6, str.length) } + +export const copyString = (content, notify) => { + const clipboard = navigator.clipboard || { + writeText: data => { + return new Promise(resolve => { + const inputDom = document.createElement('input') + inputDom.setAttribute('style', 'z-index: -1;position: fixed;opacity: 0;') + inputDom.setAttribute('type', 'text') + inputDom.setAttribute('value', data) + document.body.appendChild(inputDom) + inputDom.select() + document.execCommand('copy') + inputDom.remove() + resolve() + }) + } + } + clipboard.writeText(content).then(() => { + if (notify) { + $success(i18n.t('commons.copy_success')) + } + }) +} diff --git a/core/frontend/src/views/chart/chart/table/table-info.js b/core/frontend/src/views/chart/chart/table/table-info.js index 64aef06947..f20292db16 100644 --- a/core/frontend/src/views/chart/chart/table/table-info.js +++ b/core/frontend/src/views/chart/chart/table/table-info.js @@ -17,6 +17,7 @@ import { formatterItem, valueFormatter } from '@/views/chart/chart/formatter' import { handleTableEmptyStrategy, hexColorToRGBA } from '@/views/chart/chart/util' import { maxBy, minBy, find } from 'lodash-es' import TableTooltip from '@/views/chart/components/table/TableTooltip.vue' +import { copyString } from '@/views/chart/chart/common/common' class SortTooltip extends BaseTooltip { vueCom @@ -1093,7 +1094,7 @@ function getTooltipPosition(event) { return result } -function copyContent(s2Instance, event, fieldMap) { +function copyContent(s2Instance, event, fieldMeta) { event.preventDefault() const cell = s2Instance.getCell(event.target) const valueField = cell.getMeta().valueField @@ -1102,7 +1103,7 @@ function copyContent(s2Instance, event, fieldMap) { // 单元格 if (cellMeta?.data) { const value = cellMeta.data[valueField] - const metaObj = find(fieldMap, m => + const metaObj = find(fieldMeta, m => m.field === valueField ) content = value?.toString() @@ -1112,11 +1113,15 @@ function copyContent(s2Instance, event, fieldMap) { } else { // 列头&行头 content = cellMeta.value + const fieldMap = fieldMeta?.reduce((p, n) => { + p[n.field] = n.name + return p + },{}) if (fieldMap?.[content]) { content = fieldMap[content] } } if (content) { - navigator.clipboard.writeText(content) + copyString(content, true) } } diff --git a/core/frontend/src/views/chart/components/table/TableNormal.vue b/core/frontend/src/views/chart/components/table/TableNormal.vue index 351e8b2b55..603347d8ac 100644 --- a/core/frontend/src/views/chart/components/table/TableNormal.vue +++ b/core/frontend/src/views/chart/components/table/TableNormal.vue @@ -114,6 +114,7 @@ import { DEFAULT_COLOR_CASE, DEFAULT_SCROLL, DEFAULT_SIZE, NOT_SUPPORT_PAGE_DATA import { mapState } from 'vuex' import DePagination from '@/components/deCustomCm/pagination.js' import ViewTrackBar from '@/components/canvas/components/editor/ViewTrackBar.vue' +import { copyString } from '@/views/chart/chart/common/common' export default { name: 'TableNormal', components: { ViewTrackBar, DePagination }, @@ -502,6 +503,13 @@ export default { this.bg_class.background = hexColorToRGBA(customStyle.background.color, customStyle.background.alpha) } } + if (this.showSummary) { + const footerArr = this.$refs.tableContainer.getElementsByClassName('elx-footer--row') + if (footerArr.length) { + const footer = footerArr.item(0) + footer.addEventListener('contextmenu', this.summaryRightClick) + } + } }, getRowStyle({ row, rowIndex }) { if (rowIndex % 2 !== 0) { @@ -658,10 +666,29 @@ export default { }, cellRightClick(event) { if (event.target?.innerText) { - navigator.clipboard.writeText(event.target.innerText) + copyString(event.target.innerText, true) } event.preventDefault() }, + summaryRightClick(event) { + let targetDom + if (event.target.classList.contains('elx-cell--item')) { + targetDom = event.target + } + if (!targetDom) { + const tmp = event.target.getElementsByClassName('elx-cell--item') + if (tmp.length) { + targetDom = tmp.item(0) + } + } + if (targetDom) { + const content = targetDom.innerText + if (content?.trim()) { + copyString(content, true) + } + event.preventDefault() + } + }, antVActionPost(dimensionList, name, param) { this.pointParam = { data: {