diff --git a/frontend/src/components/canvas/components/editor/ComponentWrapper.vue b/frontend/src/components/canvas/components/editor/ComponentWrapper.vue index 289774c142..639bb5f740 100644 --- a/frontend/src/components/canvas/components/editor/ComponentWrapper.vue +++ b/frontend/src/components/canvas/components/editor/ComponentWrapper.vue @@ -274,7 +274,7 @@ export default { } else { return { ... - getStyle(style, ['top', 'left', 'width', 'height', 'rotate']), + getStyle(style, ['top', 'left', 'width', 'height', 'rotate']), position: 'relative' } } diff --git a/frontend/src/components/canvas/components/editor/Preview.vue b/frontend/src/components/canvas/components/editor/Preview.vue index 7c523fe88c..9f2dfd1854 100644 --- a/frontend/src/components/canvas/components/editor/Preview.vue +++ b/frontend/src/components/canvas/components/editor/Preview.vue @@ -120,6 +120,7 @@ import { userLoginInfo } from '@/api/systemInfo/userLogin' import html2canvas from 'html2canvasde' import { queryAll } from '@/api/panel/pdfTemplate' import PDFPreExport from '@/views/panel/export/PDFPreExport' +import { listenGlobalKeyDownPreview } from '@/components/canvas/utils/shortcutKey' const erd = elementResizeDetectorMaker() export default { @@ -351,6 +352,9 @@ export default { } }, created() { + if (this.canvasId === 'canvas-main') { + listenGlobalKeyDownPreview() + } // 取消视图请求 this.$cancelRequest('/chart/view/getData/**') this.$cancelRequest('/api/link/viewDetail/**') diff --git a/frontend/src/components/canvas/store/copy.js b/frontend/src/components/canvas/store/copy.js index fbcc6c45a3..e9b6694ded 100644 --- a/frontend/src/components/canvas/store/copy.js +++ b/frontend/src/components/canvas/store/copy.js @@ -25,6 +25,24 @@ export default { } }, mutations: { + // 复制到粘贴板 + copyToClipboard(state) { + if (state.curComponent) { + Vue.prototype.$copyText('datease-component-' + state.curComponent.id) + } + }, + passFromClipboard(state, componentId) { + state.componentData.forEach(item => { + if (item.id === componentId) { + state.copyData = { + data: deepCopy(item), + index: state.componentData.length + } + } + }) + state.isCut = false + this.commit('paste') + }, copyMultiplexingComponents(state) { let pYMax = 0 const _this = this @@ -89,10 +107,8 @@ export default { paste(state, needAdaptor) { if (!state.copyData) { - toast('请选择组件') return } - const data = state.copyData.data // 仪表板复制的组件默认不在移动端部署中mobileSelected = false data.mobileSelected = false diff --git a/frontend/src/components/canvas/utils/shortcutKey.js b/frontend/src/components/canvas/utils/shortcutKey.js index 3e1dd16b7f..540c67e8c9 100644 --- a/frontend/src/components/canvas/utils/shortcutKey.js +++ b/frontend/src/components/canvas/utils/shortcutKey.js @@ -56,7 +56,27 @@ export function listenGlobalKeyDown() { if (keyCode === ctrlKey || keyCode === commandKey) { isCtrlOrCommandDown = true } else if (isCtrlOrCommandDown) { - if (keyCode === zKey || keyCode === yKey || keyCode === vKey || keyCode === cKey || keyCode === sKey || keyCode === enlargeKey) { + if (keyCode === zKey || keyCode === yKey || keyCode === cKey || keyCode === sKey || keyCode === enlargeKey) { + e.preventDefault() + unlockMap[keyCode]() + } + } + } + + window.onkeyup = (e) => { + if (e.keyCode === ctrlKey || e.keyCode === commandKey) { + isCtrlOrCommandDown = false + } + } +} + +export function listenGlobalKeyDownPreview() { + window.onkeydown = (e) => { + const { keyCode } = e + if (keyCode === ctrlKey || keyCode === commandKey) { + isCtrlOrCommandDown = true + } else if (isCtrlOrCommandDown) { + if (keyCode === enlargeKey) { e.preventDefault() unlockMap[keyCode]() } @@ -71,12 +91,11 @@ export function listenGlobalKeyDown() { } function copy() { - store.commit('copy') + store.commit('copyToClipboard') } function paste() { - store.commit('paste') - store.commit('recordSnapshot') + } function cut() { diff --git a/frontend/src/views/chart/view/ChartEdit.vue b/frontend/src/views/chart/view/ChartEdit.vue index 9d34f0a5e5..9b0b7ff39e 100644 --- a/frontend/src/views/chart/view/ChartEdit.vue +++ b/frontend/src/views/chart/view/ChartEdit.vue @@ -192,7 +192,7 @@ @command="chartFieldEdit" > - + - + {{ $t('chart.change_chart_type') }} - + @@ -490,8 +490,8 @@ > {{ - $t('chart.drag_block_table_data_column') - }} + $t('chart.drag_block_table_data_column') + }} {{ $t('chart.drag_block_type_axis') }} @@ -499,18 +499,18 @@ v-else-if="view.type && view.type.includes('pie')" >{{ $t('chart.drag_block_pie_label') }} {{ - $t('chart.drag_block_funnel_split') - }} + $t('chart.drag_block_funnel_split') + }} {{ - $t('chart.drag_block_radar_label') - }} + $t('chart.drag_block_radar_label') + }} {{ $t('chart.area') }} {{ - $t('chart.drag_block_treemap_label') - }} + $t('chart.drag_block_treemap_label') + }} {{ - $t('chart.drag_block_word_cloud_label') - }} + $t('chart.drag_block_word_cloud_label') + }} {{ $t('chart.drag_block_label') }} / {{ $t('chart.dimension') }} @@ -633,8 +633,8 @@ > {{ - $t('chart.drag_block_table_data_column') - }} + $t('chart.drag_block_table_data_column') + }} {{ $t('chart.drag_block_value_axis') }} @@ -642,30 +642,30 @@ v-else-if="view.type && view.type.includes('pie')" >{{ $t('chart.drag_block_pie_angel') }} {{ - $t('chart.drag_block_funnel_width') - }} + $t('chart.drag_block_funnel_width') + }} {{ - $t('chart.drag_block_radar_length') - }} + $t('chart.drag_block_radar_length') + }} {{ - $t('chart.drag_block_gauge_angel') - }} + $t('chart.drag_block_gauge_angel') + }} {{ $t('chart.drag_block_label_value') }} {{ $t('chart.chart_data') }} {{ - $t('chart.drag_block_treemap_size') - }} + $t('chart.drag_block_treemap_size') + }} {{ - $t('chart.drag_block_value_axis_main') - }} + $t('chart.drag_block_value_axis_main') + }} {{ $t('chart.drag_block_progress') }} {{ - $t('chart.drag_block_word_cloud_size') - }} + $t('chart.drag_block_word_cloud_size') + }} / {{ $t('chart.quota') }} - + @@ -1268,7 +1268,7 @@ width="800px" class="dialog-css" > - +