From efe04863a09c2b951fedd05f4268d988c6bbfe43 Mon Sep 17 00:00:00 2001 From: labbomb <739955946@qq.com> Date: Tue, 19 Apr 2022 11:48:53 +0800 Subject: [PATCH] [Refactor][UI Next]Reconstructing the Log Component (#9574) * Reconstructing the Log Component * Delete pnpm-lock.yaml * Delete pnpm-lock.yaml * add pnpm-lock * Modify comments --- dolphinscheduler-ui-next/package.json | 1 + dolphinscheduler-ui-next/pnpm-lock.yaml | 589 ++++++++++-------- .../src/components/log-modal/index.tsx | 138 ++++ .../src/locales/modules/en_US.ts | 2 + .../src/locales/modules/zh_CN.ts | 2 + .../task/instance/components/log-modal.tsx | 103 --- .../task/instance/components/use-modal.ts | 58 -- .../views/projects/task/instance/index.tsx | 57 +- .../views/projects/task/instance/use-table.ts | 6 +- .../workflow/components/dag/index.tsx | 60 +- .../workflow/components/dag/use-node-menu.ts | 20 +- .../instance/components/log-modal.tsx | 368 ----------- .../instance/components/log.module.scss | 117 ---- 13 files changed, 594 insertions(+), 927 deletions(-) create mode 100644 dolphinscheduler-ui-next/src/components/log-modal/index.tsx delete mode 100644 dolphinscheduler-ui-next/src/views/projects/task/instance/components/log-modal.tsx delete mode 100644 dolphinscheduler-ui-next/src/views/projects/task/instance/components/use-modal.ts delete mode 100644 dolphinscheduler-ui-next/src/views/projects/workflow/instance/components/log-modal.tsx delete mode 100644 dolphinscheduler-ui-next/src/views/projects/workflow/instance/components/log.module.scss diff --git a/dolphinscheduler-ui-next/package.json b/dolphinscheduler-ui-next/package.json index 04bcb2c527..c004ad58a2 100644 --- a/dolphinscheduler-ui-next/package.json +++ b/dolphinscheduler-ui-next/package.json @@ -24,6 +24,7 @@ "pinia": "^2.0.11", "pinia-plugin-persistedstate": "^1.2.2", "qs": "^6.10.3", + "screenfull": "^6.0.1", "vfonts": "^0.1.0", "vue": "^3.2.31", "vue-i18n": "^9.2.0-beta.30", diff --git a/dolphinscheduler-ui-next/pnpm-lock.yaml b/dolphinscheduler-ui-next/pnpm-lock.yaml index 1906d516a5..c5eabb63e8 100644 --- a/dolphinscheduler-ui-next/pnpm-lock.yaml +++ b/dolphinscheduler-ui-next/pnpm-lock.yaml @@ -6,7 +6,7 @@ # (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 +# 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, @@ -50,6 +50,7 @@ specifiers: qs: ^6.10.3 sass: ^1.49.8 sass-loader: ^12.6.0 + screenfull: ^6.0.1 typescript: ^4.5.5 typescript-plugin-css-modules: ^3.4.0 vfonts: ^0.1.0 @@ -76,6 +77,7 @@ dependencies: pinia: 2.0.11_typescript@4.5.5+vue@3.2.31 pinia-plugin-persistedstate: 1.2.2_pinia@2.0.11 qs: 6.10.3 + screenfull: registry.npmmirror.com/screenfull/6.0.1 vfonts: 0.1.0 vue: 3.2.31 vue-i18n: 9.2.0-beta.30_vue@3.2.31 @@ -574,7 +576,7 @@ packages: engines: {node: '>= 12'} dependencies: '@intlify/shared': 9.2.0-beta.30 - source-map: 0.6.1 + source-map: registry.npmmirror.com/source-map/0.6.1 dev: false /@intlify/shared/9.2.0-beta.30: @@ -927,7 +929,7 @@ packages: '@babel/parser': 7.17.3 '@vue/shared': 3.2.31 estree-walker: 2.0.2 - source-map: 0.6.1 + source-map: registry.npmmirror.com/source-map/0.6.1 /@vue/compiler-dom/3.2.31: resolution: {integrity: sha512-60zIlFfzIDf3u91cqfqy9KhCKIJgPeqxgveH2L+87RcGU/alT6BRrk5JtUso0OibH3O7NXuNOQ0cDc9beT0wrg==} @@ -1237,7 +1239,7 @@ packages: normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: 2.3.2 + fsevents: registry.npmmirror.com/fsevents/2.3.2 dev: true /color-convert/1.9.3: @@ -1316,7 +1318,7 @@ packages: resolution: {integrity: sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==} dependencies: inherits: 2.0.4 - source-map: 0.6.1 + source-map: registry.npmmirror.com/source-map/0.6.1 source-map-resolve: 0.5.3 urix: 0.1.0 dev: true @@ -1498,211 +1500,31 @@ packages: engines: {node: '>=0.12'} dev: true - /errno/0.1.8: - resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==} - hasBin: true - requiresBuild: true - dependencies: - prr: 1.0.1 - dev: true - optional: true - - /esbuild-android-arm64/0.14.23: - resolution: {integrity: sha512-k9sXem++mINrZty1v4FVt6nC5BQCFG4K2geCIUUqHNlTdFnuvcqsY7prcKZLFhqVC1rbcJAr9VSUGFL/vD4vsw==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - /esbuild-darwin-64/0.14.23: - resolution: {integrity: sha512-lB0XRbtOYYL1tLcYw8BoBaYsFYiR48RPrA0KfA/7RFTr4MV7Bwy/J4+7nLsVnv9FGuQummM3uJ93J3ptaTqFug==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /esbuild-darwin-arm64/0.14.23: - resolution: {integrity: sha512-yat73Z/uJ5tRcfRiI4CCTv0FSnwErm3BJQeZAh+1tIP0TUNh6o+mXg338Zl5EKChD+YGp6PN+Dbhs7qa34RxSw==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /esbuild-freebsd-64/0.14.23: - resolution: {integrity: sha512-/1xiTjoLuQ+LlbfjJdKkX45qK/M7ARrbLmyf7x3JhyQGMjcxRYVR6Dw81uH3qlMHwT4cfLW4aEVBhP1aNV7VsA==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - /esbuild-freebsd-arm64/0.14.23: - resolution: {integrity: sha512-uyPqBU/Zcp6yEAZS4LKj5jEE0q2s4HmlMBIPzbW6cTunZ8cyvjG6YWpIZXb1KK3KTJDe62ltCrk3VzmWHp+iLg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - /esbuild-linux-32/0.14.23: - resolution: {integrity: sha512-37R/WMkQyUfNhbH7aJrr1uCjDVdnPeTHGeDhZPUNhfoHV0lQuZNCKuNnDvlH/u/nwIYZNdVvz1Igv5rY/zfrzQ==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /esbuild-linux-64/0.14.23: - resolution: {integrity: sha512-H0gztDP60qqr8zoFhAO64waoN5yBXkmYCElFklpd6LPoobtNGNnDe99xOQm28+fuD75YJ7GKHzp/MLCLhw2+vQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /esbuild-linux-arm/0.14.23: - resolution: {integrity: sha512-x64CEUxi8+EzOAIpCUeuni0bZfzPw/65r8tC5cy5zOq9dY7ysOi5EVQHnzaxS+1NmV+/RVRpmrzGw1QgY2Xpmw==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /esbuild-linux-arm64/0.14.23: - resolution: {integrity: sha512-c4MLOIByNHR55n3KoYf9hYDfBRghMjOiHLaoYLhkQkIabb452RWi+HsNgB41sUpSlOAqfpqKPFNg7VrxL3UX9g==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /esbuild-linux-mips64le/0.14.23: - resolution: {integrity: sha512-kHKyKRIAedYhKug2EJpyJxOUj3VYuamOVA1pY7EimoFPzaF3NeY7e4cFBAISC/Av0/tiV0xlFCt9q0HJ68IBIw==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /esbuild-linux-ppc64le/0.14.23: - resolution: {integrity: sha512-7ilAiJEPuJJnJp/LiDO0oJm5ygbBPzhchJJh9HsHZzeqO+3PUzItXi+8PuicY08r0AaaOe25LA7sGJ0MzbfBag==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /esbuild-linux-riscv64/0.14.23: - resolution: {integrity: sha512-fbL3ggK2wY0D8I5raPIMPhpCvODFE+Bhb5QGtNP3r5aUsRR6TQV+ZBXIaw84iyvKC8vlXiA4fWLGhghAd/h/Zg==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /esbuild-linux-s390x/0.14.23: - resolution: {integrity: sha512-GHMDCyfy7+FaNSO8RJ8KCFsnax8fLUsOrj9q5Gi2JmZMY0Zhp75keb5abTFCq2/Oy6KVcT0Dcbyo/bFb4rIFJA==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /esbuild-netbsd-64/0.14.23: - resolution: {integrity: sha512-ovk2EX+3rrO1M2lowJfgMb/JPN1VwVYrx0QPUyudxkxLYrWeBxDKQvc6ffO+kB4QlDyTfdtAURrVzu3JeNdA2g==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - /esbuild-openbsd-64/0.14.23: - resolution: {integrity: sha512-uYYNqbVR+i7k8ojP/oIROAHO9lATLN7H2QeXKt2H310Fc8FJj4y3Wce6hx0VgnJ4k1JDrgbbiXM8rbEgQyg8KA==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - /esbuild-sunos-64/0.14.23: - resolution: {integrity: sha512-hAzeBeET0+SbScknPzS2LBY6FVDpgE+CsHSpe6CEoR51PApdn2IB0SyJX7vGelXzlyrnorM4CAsRyb9Qev4h9g==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - /esbuild-windows-32/0.14.23: - resolution: {integrity: sha512-Kttmi3JnohdaREbk6o9e25kieJR379TsEWF0l39PQVHXq3FR6sFKtVPgY8wk055o6IB+rllrzLnbqOw/UV60EA==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /esbuild-windows-64/0.14.23: - resolution: {integrity: sha512-JtIT0t8ymkpl6YlmOl6zoSWL5cnCgyLaBdf/SiU/Eg3C13r0NbHZWNT/RDEMKK91Y6t79kTs3vyRcNZbfu5a8g==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /esbuild-windows-arm64/0.14.23: - resolution: {integrity: sha512-cTFaQqT2+ik9e4hePvYtRZQ3pqOvKDVNarzql0VFIzhc0tru/ZgdLoXd6epLiKT+SzoSce6V9YJ+nn6RCn6SHw==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true - optional: true - /esbuild/0.14.23: resolution: {integrity: sha512-XjnIcZ9KB6lfonCa+jRguXyRYcldmkyZ99ieDksqW/C8bnyEX299yA4QH2XcgijCgaddEZePPTgvx/2imsq7Ig==} engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: - esbuild-android-arm64: 0.14.23 - esbuild-darwin-64: 0.14.23 - esbuild-darwin-arm64: 0.14.23 - esbuild-freebsd-64: 0.14.23 - esbuild-freebsd-arm64: 0.14.23 - esbuild-linux-32: 0.14.23 - esbuild-linux-64: 0.14.23 - esbuild-linux-arm: 0.14.23 - esbuild-linux-arm64: 0.14.23 - esbuild-linux-mips64le: 0.14.23 - esbuild-linux-ppc64le: 0.14.23 - esbuild-linux-riscv64: 0.14.23 - esbuild-linux-s390x: 0.14.23 - esbuild-netbsd-64: 0.14.23 - esbuild-openbsd-64: 0.14.23 - esbuild-sunos-64: 0.14.23 - esbuild-windows-32: 0.14.23 - esbuild-windows-64: 0.14.23 - esbuild-windows-arm64: 0.14.23 + esbuild-android-arm64: registry.npmmirror.com/esbuild-android-arm64/0.14.23 + esbuild-darwin-64: registry.npmmirror.com/esbuild-darwin-64/0.14.23 + esbuild-darwin-arm64: registry.npmmirror.com/esbuild-darwin-arm64/0.14.23 + esbuild-freebsd-64: registry.npmmirror.com/esbuild-freebsd-64/0.14.23 + esbuild-freebsd-arm64: registry.npmmirror.com/esbuild-freebsd-arm64/0.14.23 + esbuild-linux-32: registry.npmmirror.com/esbuild-linux-32/0.14.23 + esbuild-linux-64: registry.npmmirror.com/esbuild-linux-64/0.14.23 + esbuild-linux-arm: registry.npmmirror.com/esbuild-linux-arm/0.14.23 + esbuild-linux-arm64: registry.npmmirror.com/esbuild-linux-arm64/0.14.23 + esbuild-linux-mips64le: registry.npmmirror.com/esbuild-linux-mips64le/0.14.23 + esbuild-linux-ppc64le: registry.npmmirror.com/esbuild-linux-ppc64le/0.14.23 + esbuild-linux-riscv64: registry.npmmirror.com/esbuild-linux-riscv64/0.14.23 + esbuild-linux-s390x: registry.npmmirror.com/esbuild-linux-s390x/0.14.23 + esbuild-netbsd-64: registry.npmmirror.com/esbuild-netbsd-64/0.14.23 + esbuild-openbsd-64: registry.npmmirror.com/esbuild-openbsd-64/0.14.23 + esbuild-sunos-64: registry.npmmirror.com/esbuild-sunos-64/0.14.23 + esbuild-windows-32: registry.npmmirror.com/esbuild-windows-32/0.14.23 + esbuild-windows-64: registry.npmmirror.com/esbuild-windows-64/0.14.23 + esbuild-windows-arm64: registry.npmmirror.com/esbuild-windows-arm64/0.14.23 dev: true /escalade/3.1.1: @@ -1976,14 +1798,6 @@ packages: resolution: {integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=} dev: true - /fsevents/2.3.2: - resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - requiresBuild: true - dev: true - optional: true - /function-bind/1.1.1: resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} @@ -2158,14 +1972,6 @@ packages: engines: {node: '>= 4'} dev: true - /image-size/0.5.5: - resolution: {integrity: sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=} - engines: {node: '>=0.10.0'} - hasBin: true - requiresBuild: true - dev: true - optional: true - /immutable/4.0.0: resolution: {integrity: sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw==} dev: true @@ -2353,7 +2159,7 @@ packages: dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: 4.2.9 + graceful-fs: registry.npmmirror.com/graceful-fs/4.2.9 dev: true /jstransformer/1.0.0: @@ -2377,13 +2183,13 @@ packages: parse-node-version: 1.0.1 tslib: 2.3.1 optionalDependencies: - errno: 0.1.8 - graceful-fs: 4.2.9 - image-size: 0.5.5 - make-dir: 2.1.0 - mime: 1.6.0 - needle: 2.9.1 - source-map: 0.6.1 + errno: registry.npmmirror.com/errno/0.1.8 + graceful-fs: registry.npmmirror.com/graceful-fs/4.2.9 + image-size: registry.npmmirror.com/image-size/0.5.5 + make-dir: registry.npmmirror.com/make-dir/2.1.0 + mime: registry.npmmirror.com/mime/1.6.0 + needle: registry.npmmirror.com/needle/2.9.1 + source-map: registry.npmmirror.com/source-map/0.6.1 dev: true /levn/0.4.1: @@ -2436,16 +2242,6 @@ packages: sourcemap-codec: 1.4.8 dev: false - /make-dir/2.1.0: - resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} - engines: {node: '>=6'} - requiresBuild: true - dependencies: - pify: 4.0.1 - semver: 5.7.1 - dev: true - optional: true - /merge2/1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} @@ -2459,14 +2255,6 @@ packages: picomatch: 2.3.1 dev: true - /mime/1.6.0: - resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} - engines: {node: '>=4'} - hasBin: true - requiresBuild: true - dev: true - optional: true - /minimatch/3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: @@ -2565,18 +2353,6 @@ packages: resolution: {integrity: sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=} dev: true - /needle/2.9.1: - resolution: {integrity: sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==} - engines: {node: '>= 4.4.x'} - hasBin: true - requiresBuild: true - dependencies: - debug: 3.2.7 - iconv-lite: 0.4.24 - sax: 1.2.4 - dev: true - optional: true - /neo-async/2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} dev: true @@ -2992,7 +2768,7 @@ packages: engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: - fsevents: 2.3.2 + fsevents: registry.npmmirror.com/fsevents/2.3.2 dev: true /run-parallel/1.2.0: @@ -3125,6 +2901,7 @@ packages: /source-map/0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} + dev: false /source-map/0.7.3: resolution: {integrity: sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==} @@ -3366,7 +3143,7 @@ packages: rollup: 2.68.0 sass: 1.49.8 optionalDependencies: - fsevents: 2.3.2 + fsevents: registry.npmmirror.com/fsevents/2.3.2 dev: true /void-elements/3.1.0: @@ -3643,9 +3420,299 @@ packages: date-fns: 2.28.0 dev: false + registry.npmmirror.com/errno/0.1.8: + resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/errno/-/errno-0.1.8.tgz} + name: errno + version: 0.1.8 + hasBin: true + requiresBuild: true + dependencies: + prr: 1.0.1 + dev: true + optional: true + + registry.npmmirror.com/esbuild-android-arm64/0.14.23: + resolution: {integrity: sha512-k9sXem++mINrZty1v4FVt6nC5BQCFG4K2geCIUUqHNlTdFnuvcqsY7prcKZLFhqVC1rbcJAr9VSUGFL/vD4vsw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.23.tgz} + name: esbuild-android-arm64 + version: 0.14.23 + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + registry.npmmirror.com/esbuild-darwin-64/0.14.23: + resolution: {integrity: sha512-lB0XRbtOYYL1tLcYw8BoBaYsFYiR48RPrA0KfA/7RFTr4MV7Bwy/J4+7nLsVnv9FGuQummM3uJ93J3ptaTqFug==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.23.tgz} + name: esbuild-darwin-64 + version: 0.14.23 + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + registry.npmmirror.com/esbuild-darwin-arm64/0.14.23: + resolution: {integrity: sha512-yat73Z/uJ5tRcfRiI4CCTv0FSnwErm3BJQeZAh+1tIP0TUNh6o+mXg338Zl5EKChD+YGp6PN+Dbhs7qa34RxSw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.23.tgz} + name: esbuild-darwin-arm64 + version: 0.14.23 + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + registry.npmmirror.com/esbuild-freebsd-64/0.14.23: + resolution: {integrity: sha512-/1xiTjoLuQ+LlbfjJdKkX45qK/M7ARrbLmyf7x3JhyQGMjcxRYVR6Dw81uH3qlMHwT4cfLW4aEVBhP1aNV7VsA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.23.tgz} + name: esbuild-freebsd-64 + version: 0.14.23 + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + registry.npmmirror.com/esbuild-freebsd-arm64/0.14.23: + resolution: {integrity: sha512-uyPqBU/Zcp6yEAZS4LKj5jEE0q2s4HmlMBIPzbW6cTunZ8cyvjG6YWpIZXb1KK3KTJDe62ltCrk3VzmWHp+iLg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.23.tgz} + name: esbuild-freebsd-arm64 + version: 0.14.23 + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + registry.npmmirror.com/esbuild-linux-32/0.14.23: + resolution: {integrity: sha512-37R/WMkQyUfNhbH7aJrr1uCjDVdnPeTHGeDhZPUNhfoHV0lQuZNCKuNnDvlH/u/nwIYZNdVvz1Igv5rY/zfrzQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.14.23.tgz} + name: esbuild-linux-32 + version: 0.14.23 + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + registry.npmmirror.com/esbuild-linux-64/0.14.23: + resolution: {integrity: sha512-H0gztDP60qqr8zoFhAO64waoN5yBXkmYCElFklpd6LPoobtNGNnDe99xOQm28+fuD75YJ7GKHzp/MLCLhw2+vQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.14.23.tgz} + name: esbuild-linux-64 + version: 0.14.23 + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + registry.npmmirror.com/esbuild-linux-arm/0.14.23: + resolution: {integrity: sha512-x64CEUxi8+EzOAIpCUeuni0bZfzPw/65r8tC5cy5zOq9dY7ysOi5EVQHnzaxS+1NmV+/RVRpmrzGw1QgY2Xpmw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.23.tgz} + name: esbuild-linux-arm + version: 0.14.23 + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + registry.npmmirror.com/esbuild-linux-arm64/0.14.23: + resolution: {integrity: sha512-c4MLOIByNHR55n3KoYf9hYDfBRghMjOiHLaoYLhkQkIabb452RWi+HsNgB41sUpSlOAqfpqKPFNg7VrxL3UX9g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.23.tgz} + name: esbuild-linux-arm64 + version: 0.14.23 + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + registry.npmmirror.com/esbuild-linux-mips64le/0.14.23: + resolution: {integrity: sha512-kHKyKRIAedYhKug2EJpyJxOUj3VYuamOVA1pY7EimoFPzaF3NeY7e4cFBAISC/Av0/tiV0xlFCt9q0HJ68IBIw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.23.tgz} + name: esbuild-linux-mips64le + version: 0.14.23 + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + registry.npmmirror.com/esbuild-linux-ppc64le/0.14.23: + resolution: {integrity: sha512-7ilAiJEPuJJnJp/LiDO0oJm5ygbBPzhchJJh9HsHZzeqO+3PUzItXi+8PuicY08r0AaaOe25LA7sGJ0MzbfBag==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.23.tgz} + name: esbuild-linux-ppc64le + version: 0.14.23 + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + registry.npmmirror.com/esbuild-linux-riscv64/0.14.23: + resolution: {integrity: sha512-fbL3ggK2wY0D8I5raPIMPhpCvODFE+Bhb5QGtNP3r5aUsRR6TQV+ZBXIaw84iyvKC8vlXiA4fWLGhghAd/h/Zg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.23.tgz} + name: esbuild-linux-riscv64 + version: 0.14.23 + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + registry.npmmirror.com/esbuild-linux-s390x/0.14.23: + resolution: {integrity: sha512-GHMDCyfy7+FaNSO8RJ8KCFsnax8fLUsOrj9q5Gi2JmZMY0Zhp75keb5abTFCq2/Oy6KVcT0Dcbyo/bFb4rIFJA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.23.tgz} + name: esbuild-linux-s390x + version: 0.14.23 + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + registry.npmmirror.com/esbuild-netbsd-64/0.14.23: + resolution: {integrity: sha512-ovk2EX+3rrO1M2lowJfgMb/JPN1VwVYrx0QPUyudxkxLYrWeBxDKQvc6ffO+kB4QlDyTfdtAURrVzu3JeNdA2g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.23.tgz} + name: esbuild-netbsd-64 + version: 0.14.23 + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + registry.npmmirror.com/esbuild-openbsd-64/0.14.23: + resolution: {integrity: sha512-uYYNqbVR+i7k8ojP/oIROAHO9lATLN7H2QeXKt2H310Fc8FJj4y3Wce6hx0VgnJ4k1JDrgbbiXM8rbEgQyg8KA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.23.tgz} + name: esbuild-openbsd-64 + version: 0.14.23 + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + registry.npmmirror.com/esbuild-sunos-64/0.14.23: + resolution: {integrity: sha512-hAzeBeET0+SbScknPzS2LBY6FVDpgE+CsHSpe6CEoR51PApdn2IB0SyJX7vGelXzlyrnorM4CAsRyb9Qev4h9g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.23.tgz} + name: esbuild-sunos-64 + version: 0.14.23 + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + registry.npmmirror.com/esbuild-windows-32/0.14.23: + resolution: {integrity: sha512-Kttmi3JnohdaREbk6o9e25kieJR379TsEWF0l39PQVHXq3FR6sFKtVPgY8wk055o6IB+rllrzLnbqOw/UV60EA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.14.23.tgz} + name: esbuild-windows-32 + version: 0.14.23 + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + registry.npmmirror.com/esbuild-windows-64/0.14.23: + resolution: {integrity: sha512-JtIT0t8ymkpl6YlmOl6zoSWL5cnCgyLaBdf/SiU/Eg3C13r0NbHZWNT/RDEMKK91Y6t79kTs3vyRcNZbfu5a8g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.14.23.tgz} + name: esbuild-windows-64 + version: 0.14.23 + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + registry.npmmirror.com/esbuild-windows-arm64/0.14.23: + resolution: {integrity: sha512-cTFaQqT2+ik9e4hePvYtRZQ3pqOvKDVNarzql0VFIzhc0tru/ZgdLoXd6epLiKT+SzoSce6V9YJ+nn6RCn6SHw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.23.tgz} + name: esbuild-windows-arm64 + version: 0.14.23 + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + registry.npmmirror.com/fsevents/2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz} + name: fsevents + version: 2.3.2 + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: true + optional: true + + registry.npmmirror.com/graceful-fs/4.2.9: + resolution: {integrity: sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.9.tgz} + name: graceful-fs + version: 4.2.9 + requiresBuild: true + dev: true + optional: true + + registry.npmmirror.com/image-size/0.5.5: + resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/image-size/-/image-size-0.5.5.tgz} + name: image-size + version: 0.5.5 + engines: {node: '>=0.10.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + + registry.npmmirror.com/make-dir/2.1.0: + resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/make-dir/-/make-dir-2.1.0.tgz} + name: make-dir + version: 2.1.0 + engines: {node: '>=6'} + requiresBuild: true + dependencies: + pify: 4.0.1 + semver: 5.7.1 + dev: true + optional: true + + registry.npmmirror.com/mime/1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz} + name: mime + version: 1.6.0 + engines: {node: '>=4'} + hasBin: true + requiresBuild: true + dev: true + optional: true + + registry.npmmirror.com/needle/2.9.1: + resolution: {integrity: sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/needle/-/needle-2.9.1.tgz} + name: needle + version: 2.9.1 + engines: {node: '>= 4.4.x'} + hasBin: true + requiresBuild: true + dependencies: + debug: 3.2.7 + iconv-lite: 0.4.24 + sax: 1.2.4 + dev: true + optional: true + + registry.npmmirror.com/screenfull/6.0.1: + resolution: {integrity: sha512-yzQW+j4zMUBQC51xxWaoDYjxOtl8Kn+xvue3p6v/fv2pIi1jH4AldgVLU8TBfFVgH2x3VXlf3+YiA/AYIPlaew==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/screenfull/-/screenfull-6.0.1.tgz} + name: screenfull + version: 6.0.1 + engines: {node: ^14.13.1 || >=16.0.0} + dev: false + registry.npmmirror.com/source-map/0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz} name: source-map version: 0.6.1 engines: {node: '>=0.10.0'} - dev: true diff --git a/dolphinscheduler-ui-next/src/components/log-modal/index.tsx b/dolphinscheduler-ui-next/src/components/log-modal/index.tsx new file mode 100644 index 0000000000..003ef6ce7f --- /dev/null +++ b/dolphinscheduler-ui-next/src/components/log-modal/index.tsx @@ -0,0 +1,138 @@ +/* + * 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. + */ + +import { + defineComponent, + PropType, + h, + ref, + reactive, + toRefs, + onMounted, + onUnmounted +} from 'vue' +import { useI18n } from 'vue-i18n' +import { NIcon, NLog } from 'naive-ui' +import Modal from '../modal' +import { DownloadOutlined, FullscreenExitOutlined, FullscreenOutlined, SyncOutlined } from '@vicons/antd' +import screenfull from 'screenfull' + +const props = { + showModalRef: { + type: Boolean as PropType, + default: false + }, + logRef: { + type: String as PropType, + default: '' + }, + logLoadingRef: { + type: Boolean as PropType, + default: false + }, + row: { + type: Object as PropType, + default: {} + }, + showDownloadLog: { + type: Boolean as PropType, + default: false + }, +} + +export default defineComponent({ + name: 'log-modal', + props, + emits: ['confirmModal', 'refreshLogs', 'downloadLogs'], + setup(props, ctx) { + const { t } = useI18n() + + const variables = reactive({ + isFullscreen: false + }) + + const change = () => { + variables.isFullscreen = screenfull.isFullscreen + } + + const renderIcon = (icon: any) => { + return () => h(NIcon, null, { default: () => h(icon) }) + } + + const confirmModal = () => { + variables.isFullscreen = false + ctx.emit('confirmModal', props.showModalRef) + } + + const refreshLogs = () => { + ctx.emit('refreshLogs', props.row) + } + + const handleFullScreen = () => { + screenfull.toggle(document.querySelectorAll('.logModalRef')[0]) + } + + const downloadLogs = () => { + ctx.emit('downloadLogs', props.row) + } + + onMounted(() => { + screenfull.on('change', change) + }) + + onUnmounted(() => { + screenfull.on('change', change) + }) + + return { t, renderIcon, confirmModal, refreshLogs, downloadLogs, handleFullScreen, ...toRefs(variables) } + }, + render() { + const { t, renderIcon, refreshLogs, downloadLogs, isFullscreen, handleFullScreen, showDownloadLog } = this + return ( + + + + ) + } +}) diff --git a/dolphinscheduler-ui-next/src/locales/modules/en_US.ts b/dolphinscheduler-ui-next/src/locales/modules/en_US.ts index bea83ba51c..4d2dd871ce 100644 --- a/dolphinscheduler-ui-next/src/locales/modules/en_US.ts +++ b/dolphinscheduler-ui-next/src/locales/modules/en_US.ts @@ -531,6 +531,8 @@ const project = { 'There is not any workflows. Please create a workflow, and then visit this page again.' }, task: { + cancel_full_screen: 'Cancel full screen', + enter_full_screen: 'Enter full screen', current_task_settings: 'Current task settings', online: 'Online', offline: 'Offline', diff --git a/dolphinscheduler-ui-next/src/locales/modules/zh_CN.ts b/dolphinscheduler-ui-next/src/locales/modules/zh_CN.ts index 4d96a4d10f..a03aba3bc9 100644 --- a/dolphinscheduler-ui-next/src/locales/modules/zh_CN.ts +++ b/dolphinscheduler-ui-next/src/locales/modules/zh_CN.ts @@ -527,6 +527,8 @@ const project = { '目前没有任何工作流,请先创建工作流,再访问该页面' }, task: { + cancel_full_screen: '取消全屏', + enter_full_screen: '全屏', current_task_settings: '当前任务设置', online: '已上线', offline: '已下线', diff --git a/dolphinscheduler-ui-next/src/views/projects/task/instance/components/log-modal.tsx b/dolphinscheduler-ui-next/src/views/projects/task/instance/components/log-modal.tsx deleted file mode 100644 index 4c261d4312..0000000000 --- a/dolphinscheduler-ui-next/src/views/projects/task/instance/components/log-modal.tsx +++ /dev/null @@ -1,103 +0,0 @@ -/* - * 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. - */ - -import { defineComponent, h, PropType, ref, toRefs, watch } from 'vue' -import { useI18n } from 'vue-i18n' -import { NIcon, NLog } from 'naive-ui' -import { SyncOutlined } from '@vicons/antd' -import { useModal } from './use-modal' -import Modal from '@/components/modal' - -const props = { - showModalRef: { - type: Boolean as PropType, - default: false - }, - row: { - type: Object as PropType, - default: {} - } -} - -const LogModal = defineComponent({ - name: 'LogModal', - props, - emits: ['confirmModal'], - setup(props, ctx) { - const { t } = useI18n() - const { variables, getLogs } = useModal() - const renderIcon = (icon: any) => { - return () => h(NIcon, null, { default: () => h(icon) }) - } - - const confirmModal = () => { - ctx.emit('confirmModal', props.showModalRef) - } - - const refreshLogs = () => { - variables.logRef = '' - variables.loadingRef = true - variables.skipLineNum = 0 - variables.limit = 1000 - - getLogs() - } - - watch( - () => props.showModalRef, - () => { - if (props.showModalRef) { - variables.id = props.row.id - props.showModalRef && variables.id && getLogs() - } else { - variables.id = '' - variables.logRef = '' - variables.loadingRef = true - variables.skipLineNum = 0 - variables.limit = 1000 - } - } - ) - - return { t, ...toRefs(variables), confirmModal, renderIcon, refreshLogs } - }, - render() { - const { t, renderIcon, refreshLogs } = this - - return ( - - - - ) - } -}) - -export default LogModal diff --git a/dolphinscheduler-ui-next/src/views/projects/task/instance/components/use-modal.ts b/dolphinscheduler-ui-next/src/views/projects/task/instance/components/use-modal.ts deleted file mode 100644 index d3fd8909b3..0000000000 --- a/dolphinscheduler-ui-next/src/views/projects/task/instance/components/use-modal.ts +++ /dev/null @@ -1,58 +0,0 @@ -/* - * 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. - */ - -import { reactive, ref } from 'vue' -import { useAsyncState } from '@vueuse/core' -import { queryLog } from '@/service/modules/log' - -export function useModal() { - const variables = reactive({ - id: ref(''), - loadingRef: ref(true), - logRef: ref(''), - skipLineNum: ref(0), - limit: ref(1000) - }) - - const getLogs = () => { - const { state } = useAsyncState( - queryLog({ - taskInstanceId: Number(variables.id), - limit: variables.limit, - skipLineNum: variables.skipLineNum - }).then((res: string) => { - variables.logRef += res - - if (res) { - variables.limit += 1000 - variables.skipLineNum += 1000 - getLogs() - } else { - variables.loadingRef = false - } - }), - {} - ) - - return state - } - - return { - variables, - getLogs - } -} diff --git a/dolphinscheduler-ui-next/src/views/projects/task/instance/index.tsx b/dolphinscheduler-ui-next/src/views/projects/task/instance/index.tsx index 680bb7f031..43ca17afbd 100644 --- a/dolphinscheduler-ui-next/src/views/projects/task/instance/index.tsx +++ b/dolphinscheduler-ui-next/src/views/projects/task/instance/index.tsx @@ -31,7 +31,9 @@ import { SearchOutlined } from '@vicons/antd' import { useTable } from './use-table' import { useI18n } from 'vue-i18n' import Card from '@/components/card' -import LogModal from './components/log-modal' +import LogModal from '@/components/log-modal' +import { useAsyncState } from '@vueuse/core' +import { queryLog } from '@/service/modules/log' import { stateType } from '@/utils/common' import styles from './index.module.scss' @@ -68,6 +70,35 @@ const TaskInstance = defineComponent({ variables.showModalRef = false } + const getLogs = (row:any) => { + const { state } = useAsyncState( + queryLog({ + taskInstanceId: Number(row.id), + limit: variables.limit, + skipLineNum: variables.skipLineNum + }).then((res: string) => { + variables.logRef += res + if (res) { + variables.limit += 1000 + variables.skipLineNum += 1000 + getLogs(row) + } else { + variables.logLoadingRef = false + } + }), + {} + ) + + return state + } + + const refreshLogs = (row:any) => { + variables.logRef = '' + variables.limit = 1000 + variables.skipLineNum = 0 + getLogs(row) + } + onMounted(() => { createColumns(variables) requestTableData() @@ -77,13 +108,29 @@ const TaskInstance = defineComponent({ createColumns(variables) }) + watch( + () => variables.showModalRef, + () => { + if (variables.showModalRef) { + getLogs(variables.row) + } else { + variables.row = {} + variables.logRef = '' + variables.logLoadingRef = true + variables.skipLineNum = 0 + variables.limit = 1000 + } + } + ) + return { t, ...toRefs(variables), requestTableData, onUpdatePageSize, onSearch, - onConfirmModal + onConfirmModal, + refreshLogs } }, render() { @@ -93,7 +140,8 @@ const TaskInstance = defineComponent({ onUpdatePageSize, onSearch, onConfirmModal, - loadingRef + loadingRef, + refreshLogs } = this return ( @@ -173,8 +221,11 @@ const TaskInstance = defineComponent({ ) diff --git a/dolphinscheduler-ui-next/src/views/projects/task/instance/use-table.ts b/dolphinscheduler-ui-next/src/views/projects/task/instance/use-table.ts index 9e4ac33569..4a93978435 100644 --- a/dolphinscheduler-ui-next/src/views/projects/task/instance/use-table.ts +++ b/dolphinscheduler-ui-next/src/views/projects/task/instance/use-table.ts @@ -63,7 +63,11 @@ export function useTable() { totalPage: ref(1), showModalRef: ref(false), row: {}, - loadingRef: ref(false) + loadingRef: ref(false), + logRef: '', + logLoadingRef: ref(true), + skipLineNum: ref(0), + limit: ref(1000) }) const createColumns = (variables: any) => { diff --git a/dolphinscheduler-ui-next/src/views/projects/workflow/components/dag/index.tsx b/dolphinscheduler-ui-next/src/views/projects/workflow/components/dag/index.tsx index 77742986a9..daa8d170df 100644 --- a/dolphinscheduler-ui-next/src/views/projects/workflow/components/dag/index.tsx +++ b/dolphinscheduler-ui-next/src/views/projects/workflow/components/dag/index.tsx @@ -49,8 +49,11 @@ import DagSaveModal from './dag-save-modal' import ContextMenuItem from './dag-context-menu' import TaskModal from '@/views/projects/task/components/node/detail-modal' import StartModal from '@/views/projects/workflow/definition/components/start-modal' -import LogModal from '@/views/projects/workflow/instance/components/log-modal' +import LogModal from '@/components/log-modal' import './x6-style.scss' +import { queryLog } from '@/service/modules/log' +import { useAsyncState } from '@vueuse/core' +import { downloadFile } from '@/service/service' const props = { // If this prop is passed, it means from definition detail @@ -111,7 +114,7 @@ export default defineComponent({ } = useTaskEdit({ graph, definition: toRef(props, 'definition') }) // Right click cell - const { nodeVariables, menuHide, menuStart, viewLog, hideLog } = + const { nodeVariables, menuHide, menuStart, viewLog } = useNodeMenu({ graph }) @@ -230,6 +233,46 @@ export default defineComponent({ const handleViewLog = (taskId: number, taskType: string) => { taskModalVisible.value = false viewLog(taskId, taskType) + getLogs() + } + + const getLogs = () => { + const { state } = useAsyncState( + queryLog({ + taskInstanceId: nodeVariables.logTaskId, + limit: nodeVariables.limit, + skipLineNum: nodeVariables.skipLineNum + }).then((res: string) => { + nodeVariables.logRef += res + if (res) { + nodeVariables.limit += 1000 + nodeVariables.skipLineNum += 1000 + getLogs() + } else { + nodeVariables.logLoadingRef = false + } + }), + {} + ) + + return state + } + + const refreshLogs = () => { + nodeVariables.logRef = '' + nodeVariables.limit = 1000 + nodeVariables.skipLineNum = 0 + getLogs() + } + + const downloadLogs = () => { + downloadFile('log/download-log', { + taskInstanceId: nodeVariables.logTaskId + }) + } + + const onConfirmModal = () => { + nodeVariables.showModalRef = false } watch( @@ -317,11 +360,16 @@ export default defineComponent({ v-model:show={nodeVariables.startModalShow} /> )} - {!!props.instance && nodeVariables.logModalShow && ( + {!!props.instance && ( )} diff --git a/dolphinscheduler-ui-next/src/views/projects/workflow/components/dag/use-node-menu.ts b/dolphinscheduler-ui-next/src/views/projects/workflow/components/dag/use-node-menu.ts index 4848d8a052..26d2d0c7a7 100644 --- a/dolphinscheduler-ui-next/src/views/projects/workflow/components/dag/use-node-menu.ts +++ b/dolphinscheduler-ui-next/src/views/projects/workflow/components/dag/use-node-menu.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { reactive, Ref } from 'vue' +import { reactive, ref, Ref } from 'vue' import { onMounted } from 'vue' import type { Graph, Cell } from '@antv/x6' @@ -32,12 +32,17 @@ export function useNodeMenu(options: Options) { const nodeVariables = reactive({ menuVisible: false, startModalShow: false, - logModalShow: false, logTaskId: -1, logTaskType: '', pageX: 0, pageY: 0, - menuCell: {} as Cell + menuCell: {} as Cell, + showModalRef: ref(false), + row: {}, + logRef: '', + logLoadingRef: ref(true), + skipLineNum: ref(0), + limit: ref(1000) }) const menuHide = () => { @@ -54,11 +59,7 @@ export function useNodeMenu(options: Options) { const viewLog = (taskId: number, taskType: string) => { nodeVariables.logTaskId = taskId nodeVariables.logTaskType = taskType - nodeVariables.logModalShow = true - } - - const hideLog = () => { - nodeVariables.logModalShow = false + nodeVariables.showModalRef = true } onMounted(() => { @@ -83,7 +84,6 @@ export function useNodeMenu(options: Options) { nodeVariables, menuHide, menuStart, - viewLog, - hideLog + viewLog } } diff --git a/dolphinscheduler-ui-next/src/views/projects/workflow/instance/components/log-modal.tsx b/dolphinscheduler-ui-next/src/views/projects/workflow/instance/components/log-modal.tsx deleted file mode 100644 index 3e352214ea..0000000000 --- a/dolphinscheduler-ui-next/src/views/projects/workflow/instance/components/log-modal.tsx +++ /dev/null @@ -1,368 +0,0 @@ -/* - * 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. - */ - -import _ from 'lodash' -import { - defineComponent, - PropType, - Transition, - toRefs, - ref, - onMounted, - computed, - reactive, - renderSlot -} from 'vue' -import { useI18n } from 'vue-i18n' -import { NButton, NIcon, NTooltip } from 'naive-ui' -import { queryLog } from '@/service/modules/log' -import { - DownloadOutlined, - SyncOutlined, - FullscreenOutlined, - FullscreenExitOutlined -} from '@vicons/antd' -import { downloadFile } from '@/service/service' -import styles from './log.module.scss' - -const props = { - taskInstanceId: { - type: Number as PropType, - default: -1 - }, - taskInstanceType: { - type: String as PropType, - default: '' - } -} - -export default defineComponent({ - name: 'workflow-instance-log', - props, - emits: ['hideLog'], - setup(props, ctx) { - const { t } = useI18n() - - const loadingRef = ref(false) - const loadingIndex = ref(0) - const isDataRef = ref(true) - const logBox = ref() - const logContent = ref() - const logContentBox = ref() - const textareaLog = ref() - const isScreen = ref(false) - const textareaHeight = computed(() => - logContentBox.value ? logContentBox.value.clientHeight : 0 - ) - const contentRef = ref() - - const boxRef = reactive({ - width: '', - height: '', - marginLeft: '', - marginRight: '', - marginTop: '' - }) - - const refreshLog = () => { - loadingRef.value = true - queryLog({ - taskInstanceId: props.taskInstanceId, - skipLineNum: loadingIndex.value * 1000, - limit: loadingIndex.value === 0 ? 1000 : (loadingIndex.value + 1) * 1000 - }).then((res: any) => { - setTimeout(() => { - loadingRef.value = false - if (res) { - window.$message.success(t('project.workflow.update_log_success')) - } else { - window.$message.warning(t('project.workflow.no_more_log')) - } - }, 1500) - textareaLog.value.innerHTML = res || t('project.workflow.no_log') - }) - } - - const showLog = () => { - queryLog({ - taskInstanceId: props.taskInstanceId, - skipLineNum: loadingIndex.value * 1000, - limit: loadingIndex.value === 0 ? 1000 : (loadingIndex.value + 1) * 1000 - }).then((res: any) => { - if (!res) { - isDataRef.value = false - setTimeout(() => { - window.$message.warning(t('project.workflow.no_more_log')) - }, 1000) - textareaLog.value.innerHTML = - contentRef.value || t('project.workflow.no_log') - } else { - isDataRef.value = true - contentRef.value = res - textareaLog.value.innerHTML = - contentRef.value || t('project.workflow.no_log') - setTimeout(() => { - textareaLog.value.scrollTop = 2 - }, 800) - } - }) - } - - const initLog = () => { - window.$message.info(t('project.workflow.loading_log')) - showLog() - } - - const downloadLog = () => { - downloadFile('log/download-log', { - taskInstanceId: props.taskInstanceId - }) - } - - const screenOpen = () => { - isScreen.value = true - const winW = window.innerWidth - 40 - const winH = window.innerHeight - 40 - - boxRef.width = `${winW}px` - boxRef.height = `${winH}px` - boxRef.marginLeft = `-${winW / 2}px` - boxRef.marginRight = `-${winH / 2}px` - boxRef.marginTop = `-${winH / 2}px` - - logContent.value.animate({ scrollTop: 0 }, 0) - } - - const screenClose = () => { - isScreen.value = false - boxRef.width = '' - boxRef.height = '' - boxRef.marginLeft = '' - boxRef.marginRight = '' - boxRef.marginTop = '' - - logContent.value.animate({ scrollTop: 0 }, 0) - } - - const toggleScreen = () => { - if (isScreen.value) { - screenClose() - } else { - screenOpen() - } - } - - const close = () => { - ctx.emit('hideLog') - } - - /** - * up - */ - const onUp = _.throttle( - function () { - loadingIndex.value = loadingIndex.value - 1 - showLog() - }, - 1000, - { - trailing: false - } - ) - - /** - * down - */ - const onDown = _.throttle( - function () { - loadingIndex.value = loadingIndex.value + 1 - showLog() - }, - 1000, - { - trailing: false - } - ) - - const onTextareaScroll = () => { - textareaLog.value.onscroll = () => { - // Listen for scrollbar events - if ( - textareaLog.value.scrollTop + textareaLog.value.clientHeight === - textareaLog.value.clientHeight - ) { - if (loadingIndex.value > 0) { - window.$message.info(t('project.workflow.loading_log')) - onUp() - } - } - // Listen for scrollbar events - if ( - textareaLog.value.scrollHeight === - textareaLog.value.clientHeight + textareaLog.value.scrollTop - ) { - // No data is not requested - if (isDataRef.value) { - window.$message.info(t('project.workflow.loading_log')) - onDown() - } - } - } - } - - onMounted(() => { - initLog() - onTextareaScroll() - }) - - return { - t, - logBox, - logContentBox, - loadingRef, - textareaLog, - logContent, - textareaHeight, - isScreen, - boxRef, - showLog, - downloadLog, - refreshLog, - toggleScreen, - close, - ...toRefs(props) - } - }, - render() { - return ( -
- - {this.taskInstanceId && this.taskInstanceType !== 'SUB_PROCESS' && ( - - {renderSlot(this.$slots, 'history')} - - - {renderSlot(this.$slots, 'log')} - - - )} - - { -
-
-
-
- {this.t('project.workflow.view_log')} -
-
- - {{ - trigger: () => ( - - - - - - ), - default: () => this.t('project.workflow.download_log') - }} - - - {{ - trigger: () => ( - - !this.loadingRef && this.refreshLog() - } - > - - - - - ), - default: () => this.t('project.workflow.refresh_log') - }} - - - {{ - trigger: () => ( - - - {this.isScreen ? ( - - ) : ( - - )} - - - ), - default: () => - this.isScreen - ? this.t('project.workflow.cancel_full_screen') - : this.t('project.workflow.enter_full_screen') - }} - -
-
-
-
- -
-
-
- - {this.t('project.workflow.close')} - -
-
-
- } -
-
-
- ) - } -}) diff --git a/dolphinscheduler-ui-next/src/views/projects/workflow/instance/components/log.module.scss b/dolphinscheduler-ui-next/src/views/projects/workflow/instance/components/log.module.scss deleted file mode 100644 index 9ed171abd0..0000000000 --- a/dolphinscheduler-ui-next/src/views/projects/workflow/instance/components/log.module.scss +++ /dev/null @@ -1,117 +0,0 @@ -/* - * 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. - */ - -.log-pop { - position: fixed; - left: 0; - top: 0; - width: 100%; - height: 100%; - background: rgba(0, 0, 0, 0.4); - z-index: 10; - .log-box { - width: 660px; - height: 520px; - background: #fff; - border-radius: 3px; - position: absolute; - left: 50%; - top: 50%; - margin-left: -340px; - margin-top: -250px; - .title { - height: 50px; - display: flex; - justify-content: space-between; - align-items: center; - border-bottom: 1px solid #dcdedc; - .left-item { - font-size: 16px; - color: #333; - display: inline-block; - padding-left: 20px; - } - .right-item { - padding-right: 10px; - .button { - margin-right: 10px; - } - } - } - .content { - height: calc(100% - 100px); - background: #002a35; - padding: 6px 2px; - .content-log-box { - width: 100%; - height: 100%; - word-break: break-all; - textarea { - background: none; - color: #9cabaf; - border: 0; - font-family: 'Microsoft Yahei,Arial,Hiragino Sans GB,tahoma,SimSun,sans-serif'; - font-weight: bold; - resize: none; - line-height: 1.6; - padding: 0px; - } - } - } - .operation { - text-align: right; - height: 50px; - line-height: 44px; - border-top: 1px solid #dcdedc; - padding-right: 20px; - background: #fff; - position: relative; - } - } -} -@-webkit-keyframes rotateloading { - from { - -webkit-transform: rotate(0deg); - } - to { - -webkit-transform: rotate(360deg); - } -} -@-moz-keyframes rotateloading { - from { - -moz-transform: rotate(0deg); - } - to { - -moz-transform: rotate(359deg); - } -} -@-o-keyframes rotateloading { - from { - -o-transform: rotate(0deg); - } - to { - -o-transform: rotate(359deg); - } -} -@keyframes rotateloading { - from { - transform: rotate(0deg); - } - to { - transform: rotate(359deg); - } -}