mirror of
https://gitee.com/dolphinscheduler/DolphinScheduler.git
synced 2024-12-04 05:09:48 +08:00
[Fix][UI Next][V1.0.0-Alpha] Fix the problem of not copying. (#9285)
* [Fix][UI Next][V1.0.0-Alpha] Fix the problem of not copying. * [Fix][UI Next][V1.0.0-Alpha] Fix the warning.
This commit is contained in:
parent
ddf1ff98fa
commit
9d68b178d9
31
dolphinscheduler-ui-next/src/utils/clipboard.ts
Normal file
31
dolphinscheduler-ui-next/src/utils/clipboard.ts
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
* contributor license agreements. See the NOTICE file distributed with
|
||||||
|
* this work for additional information regarding copyright ownership.
|
||||||
|
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
* (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
export const copy = (text: string): boolean => {
|
||||||
|
const range = document.createRange()
|
||||||
|
const node = document.createTextNode(text)
|
||||||
|
document.body.append(node)
|
||||||
|
range.selectNode(node)
|
||||||
|
window.getSelection()?.addRange(range)
|
||||||
|
let result = false
|
||||||
|
try {
|
||||||
|
result = document.execCommand('copy')
|
||||||
|
} catch (err) {}
|
||||||
|
window.getSelection()?.removeAllRanges()
|
||||||
|
document.body.removeChild(node)
|
||||||
|
return result
|
||||||
|
}
|
@ -15,7 +15,7 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { useClipboard } from '@vueuse/core'
|
import { copy } from '@/utils/clipboard'
|
||||||
import { useMessage } from 'naive-ui'
|
import { useMessage } from 'naive-ui'
|
||||||
import { useI18n } from 'vue-i18n'
|
import { useI18n } from 'vue-i18n'
|
||||||
|
|
||||||
@ -24,12 +24,11 @@ import { useI18n } from 'vue-i18n'
|
|||||||
*/
|
*/
|
||||||
export function useTextCopy() {
|
export function useTextCopy() {
|
||||||
const { t } = useI18n()
|
const { t } = useI18n()
|
||||||
const { copy } = useClipboard()
|
|
||||||
const message = useMessage()
|
const message = useMessage()
|
||||||
const copyText = (text: string) => {
|
const copyText = (text: string) => {
|
||||||
copy(text).then(() => {
|
if (copy(text)) {
|
||||||
message.success(t('project.dag.copy_success'))
|
message.success(t('project.dag.copy_success'))
|
||||||
})
|
}
|
||||||
}
|
}
|
||||||
return {
|
return {
|
||||||
copy: copyText
|
copy: copyText
|
||||||
|
@ -102,3 +102,16 @@
|
|||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
word-break: break-all;
|
word-break: break-all;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.workflow-name {
|
||||||
|
:global {
|
||||||
|
div:first-child {
|
||||||
|
width: calc(100% - 32px);
|
||||||
|
|
||||||
|
.n-button,
|
||||||
|
.n-button__content {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -19,9 +19,8 @@ import _ from 'lodash'
|
|||||||
import { h, ref, reactive } from 'vue'
|
import { h, ref, reactive } from 'vue'
|
||||||
import { useI18n } from 'vue-i18n'
|
import { useI18n } from 'vue-i18n'
|
||||||
import { useRouter } from 'vue-router'
|
import { useRouter } from 'vue-router'
|
||||||
import type { Router } from 'vue-router'
|
|
||||||
import type { TableColumns, RowKey } from 'naive-ui/es/data-table/src/interface'
|
|
||||||
import { useAsyncState } from '@vueuse/core'
|
import { useAsyncState } from '@vueuse/core'
|
||||||
|
import { useTextCopy } from '../components/dag/use-text-copy'
|
||||||
import {
|
import {
|
||||||
batchCopyByCodes,
|
batchCopyByCodes,
|
||||||
batchDeleteByCodes,
|
batchDeleteByCodes,
|
||||||
@ -32,7 +31,8 @@ import {
|
|||||||
} from '@/service/modules/process-definition'
|
} from '@/service/modules/process-definition'
|
||||||
import TableAction from './components/table-action'
|
import TableAction from './components/table-action'
|
||||||
import styles from './index.module.scss'
|
import styles from './index.module.scss'
|
||||||
import { NTag } from 'naive-ui'
|
import { NTag, NSpace, NIcon, NButton, NEllipsis } from 'naive-ui'
|
||||||
|
import { CopyOutlined } from '@vicons/antd'
|
||||||
import ButtonLink from '@/components/button-link'
|
import ButtonLink from '@/components/button-link'
|
||||||
import {
|
import {
|
||||||
COLUMN_WIDTH_CONFIG,
|
COLUMN_WIDTH_CONFIG,
|
||||||
@ -40,11 +40,13 @@ import {
|
|||||||
DefaultTableWidth
|
DefaultTableWidth
|
||||||
} from '@/utils/column-width-config'
|
} from '@/utils/column-width-config'
|
||||||
import type { IDefinitionParam } from './types'
|
import type { IDefinitionParam } from './types'
|
||||||
|
import type { Router } from 'vue-router'
|
||||||
|
import type { TableColumns, RowKey } from 'naive-ui/es/data-table/src/interface'
|
||||||
|
|
||||||
export function useTable() {
|
export function useTable() {
|
||||||
const { t } = useI18n()
|
const { t } = useI18n()
|
||||||
const router: Router = useRouter()
|
const router: Router = useRouter()
|
||||||
|
const { copy } = useTextCopy()
|
||||||
const variables = reactive({
|
const variables = reactive({
|
||||||
columns: [],
|
columns: [],
|
||||||
tableWidth: DefaultTableWidth,
|
tableWidth: DefaultTableWidth,
|
||||||
@ -82,18 +84,43 @@ export function useTable() {
|
|||||||
title: t('project.workflow.workflow_name'),
|
title: t('project.workflow.workflow_name'),
|
||||||
key: 'name',
|
key: 'name',
|
||||||
className: 'workflow-name',
|
className: 'workflow-name',
|
||||||
...COLUMN_WIDTH_CONFIG['name'],
|
width: 200,
|
||||||
render: (row) =>
|
render: (row) =>
|
||||||
h(
|
h(
|
||||||
ButtonLink,
|
NSpace,
|
||||||
{
|
{
|
||||||
onClick: () =>
|
justify: 'space-between',
|
||||||
void router.push({
|
wrap: false,
|
||||||
name: 'workflow-definition-detail',
|
class: styles['workflow-name']
|
||||||
params: { code: row.code }
|
|
||||||
})
|
|
||||||
},
|
},
|
||||||
{ default: () => row.name }
|
{
|
||||||
|
default: () => [
|
||||||
|
h(
|
||||||
|
ButtonLink,
|
||||||
|
{
|
||||||
|
onClick: () =>
|
||||||
|
void router.push({
|
||||||
|
name: 'workflow-definition-detail',
|
||||||
|
params: { code: row.code }
|
||||||
|
})
|
||||||
|
},
|
||||||
|
{
|
||||||
|
default: () => h(NEllipsis, null, () => row.name)
|
||||||
|
}
|
||||||
|
),
|
||||||
|
h(
|
||||||
|
NButton,
|
||||||
|
{
|
||||||
|
quaternary: true,
|
||||||
|
circle: true,
|
||||||
|
type: 'info',
|
||||||
|
size: 'tiny',
|
||||||
|
onClick: () => void copy(row.name)
|
||||||
|
},
|
||||||
|
{ icon: () => h(NIcon, { size: 16 }, () => h(CopyOutlined)) }
|
||||||
|
)
|
||||||
|
]
|
||||||
|
}
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user