From 1ea740c51e84a80e6eb069846ba4a58438f9795c Mon Sep 17 00:00:00 2001 From: wupengfei <834520024@qq.com> Date: 星期一, 07 四月 2025 17:40:12 +0800 Subject: [PATCH] feat: init --- src/constants/dic.ts | 43 + src/hooks/dic.ts | 131 +++++ src/components/commonView/MateriaDetailDialog.vue | 46 + src/components/commonView/SettlementMaterialInfoView.vue | 51 ++ src/constants/enterpriseMaterial.ts | 111 ++++ src/hooks/index.ts | 1 pnpm-lock.yaml | 271 ++++++---- src/views/MaterialReview/MaterialReviewAudit.vue | 121 ++++ src/components/commonView/MaterialInfoView.vue | 42 + src/components/commonView/DetailView.vue | 63 ++ src/components/commonView/BatchInfoView.vue | 78 +++ src/components/commonView/DeclareEnterpriseTableView.vue | 145 +++++ package.json | 2 src/components/commonView/types.ts | 14 src/components/commonView/FourStreamsMaterialFileTable.vue | 179 +++++++ src/views/Reward/RewardDeclareDetail.vue | 62 ++ src/components/Layout/ChunkCellV2.vue | 40 + src/constants/index.ts | 2 src/views/MaterialReview/MaterialReviewDetail.vue | 88 +++ 19 files changed, 1,374 insertions(+), 116 deletions(-) diff --git a/package.json b/package.json index 78dd350..6a6f138 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ "dependencies": { "@bole-12333/chat-kit": "latest", "@bole-12333/customer-chat": "latest", - "@bole-core/components": "^1.2.28", + "@bole-core/components": "latest", "@bole-core/core": "latest", "@bole-core/pretty-layout": "latest", "@bole-core/sass-utils": "latest", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ccc3c7b..97e48f3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,5 +1,9 @@ lockfileVersion: '6.0' +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + overrides: vue: 3.5.11 @@ -16,8 +20,8 @@ specifier: latest version: 1.0.3(@bole-12333/chat-kit@1.0.1)(@tiptap/core@2.1.13)(@tiptap/extension-document@2.1.13)(@tiptap/extension-image@2.1.13)(@tiptap/extension-mention@2.1.13)(@tiptap/extension-paragraph@2.1.13)(@tiptap/extension-placeholder@2.1.13)(@tiptap/extension-text@2.1.13)(@tiptap/pm@2.1.13)(@tiptap/suggestion@2.1.13)(dayjs@1.11.6)(vue@3.5.11) '@bole-core/components': - specifier: ^1.2.28 - version: 1.2.28(@bole-core/core@1.0.2)(@bole-core/sass-utils@0.0.1)(@element-plus/icons-vue@2.3.1)(@tanstack/vue-query@4.37.1)(@videojs-player/vue@1.0.0)(@vueuse/core@11.1.0)(@vueuse/shared@11.1.0)(dayjs@1.11.6)(element-plus@2.8.4)(lodash@4.17.21)(mitt@3.0.0)(senin-help@1.0.5)(senin-vue@1.0.4)(video.js@7.20.3)(vue-component-type-helpers@2.1.6)(vue@3.5.11) + specifier: latest + version: 1.3.6(@bole-core/core@1.0.2)(@bole-core/sass-utils@0.0.1)(@element-plus/icons-vue@2.3.1)(@tanstack/vue-query@4.37.1)(@videojs-player/vue@1.0.0)(@vueuse/core@11.1.0)(@vueuse/shared@11.1.0)(dayjs@1.11.6)(element-plus@2.8.4)(lodash@4.17.21)(mitt@3.0.0)(senin-help@1.0.5)(senin-vue@1.0.4)(video.js@7.20.3)(vue-component-type-helpers@2.1.6)(vue@3.5.11) '@bole-core/core': specifier: latest version: 1.0.2(@ywwlmm/openapi@0.0.3)(ali-oss@6.21.0)(axios@1.7.7)(dayjs@1.11.6)(element-plus@2.8.4)(file-saver@2.0.5)(jszip@3.10.1)(lodash@4.17.21)(senior-request@1.0.1)(vue-router@4.4.5)(vue@3.5.11)(xlsx-style@0.8.13)(xlsx@0.18.5) @@ -44,13 +48,13 @@ version: 4.37.1(vue@3.5.11) '@tencentcloud/call-uikit-vue': specifier: ^3.1.5 - version: 3.1.5(react-native@0.76.5)(react@19.0.0) + version: 3.1.5 '@tencentcloud/chat-uikit-vue': specifier: ^2.0.0 version: 2.0.0(@tiptap/core@2.1.13)(@tiptap/extension-document@2.1.13)(@tiptap/extension-image@2.1.13)(@tiptap/extension-mention@2.1.13)(@tiptap/extension-paragraph@2.1.13)(@tiptap/extension-placeholder@2.1.13)(@tiptap/extension-text@2.1.13)(@tiptap/pm@2.1.13)(@tiptap/suggestion@2.1.13)(react-native@0.76.5)(react@19.0.0)(vue@3.5.11) '@tencentcloud/tui-core': specifier: ^2.0.0 - version: 2.0.0(react-native@0.76.5)(react@19.0.0) + version: 2.0.0 '@videojs-player/vue': specifier: ^1.0.0 version: 1.0.0(@types/video.js@7.3.49)(video.js@7.20.3)(vue@3.5.11) @@ -2123,9 +2127,9 @@ peerDependencies: '@tencentcloud/chat-uikit-engine': '*' lodash: '*' - vue: '*' + vue: 3.5.11 dependencies: - '@tencentcloud/chat-uikit-engine': 2.4.0(react-native@0.76.5)(react@19.0.0) + '@tencentcloud/chat-uikit-engine': 2.4.0 lodash: 4.17.21 vue: 3.5.11(typescript@4.8.4) dev: false @@ -2144,7 +2148,7 @@ '@tiptap/pm': ^2.0.0-beta.220 '@tiptap/suggestion': ^2.0.0-beta.220 dayjs: '*' - vue: '*' + vue: 3.5.11 dependencies: '@bole-12333/chat-kit': 1.0.1(@tencentcloud/chat-uikit-engine@2.4.0)(lodash@4.17.21)(vue@3.5.11) '@tiptap/core': 2.1.13(@tiptap/pm@2.1.13) @@ -2160,8 +2164,8 @@ vue: 3.5.11(typescript@4.8.4) dev: false - /@bole-core/components@1.2.28(@bole-core/core@1.0.2)(@bole-core/sass-utils@0.0.1)(@element-plus/icons-vue@2.3.1)(@tanstack/vue-query@4.37.1)(@videojs-player/vue@1.0.0)(@vueuse/core@11.1.0)(@vueuse/shared@11.1.0)(dayjs@1.11.6)(element-plus@2.8.4)(lodash@4.17.21)(mitt@3.0.0)(senin-help@1.0.5)(senin-vue@1.0.4)(video.js@7.20.3)(vue-component-type-helpers@2.1.6)(vue@3.5.11): - resolution: {integrity: sha512-Gh7gBf8vl+L2/Ph55NqRcVy2CaWRVGYZhyUo0H9Ela61B9hV2ALz5B95Km+jbvMdhl4rr5b/gVh6a/3DhGTv7A==} + /@bole-core/components@1.3.6(@bole-core/core@1.0.2)(@bole-core/sass-utils@0.0.1)(@element-plus/icons-vue@2.3.1)(@tanstack/vue-query@4.37.1)(@videojs-player/vue@1.0.0)(@vueuse/core@11.1.0)(@vueuse/shared@11.1.0)(dayjs@1.11.6)(element-plus@2.8.4)(lodash@4.17.21)(mitt@3.0.0)(senin-help@1.0.5)(senin-vue@1.0.4)(video.js@7.20.3)(vue-component-type-helpers@2.1.6)(vue@3.5.11): + resolution: {integrity: sha512-m4f6vSX23a6X0i/QFvVW1iHh69RPa2haPA+vA3XVPa8LwYFBUu4RnbI3TC+IAFm5hb16Rb8BtJpqNcLeGB3IyA==} peerDependencies: '@bole-core/core': '*' '@bole-core/sass-utils': '*' @@ -2177,7 +2181,7 @@ senin-help: '*' senin-vue: '*' video.js: '*' - vue: '*' + vue: 3.5.11 vue-component-type-helpers: ^2.1.6 dependencies: '@bole-core/core': 1.0.2(@ywwlmm/openapi@0.0.3)(ali-oss@6.21.0)(axios@1.7.7)(dayjs@1.11.6)(element-plus@2.8.4)(file-saver@2.0.5)(jszip@3.10.1)(lodash@4.17.21)(senior-request@1.0.1)(vue-router@4.4.5)(vue@3.5.11)(xlsx-style@0.8.13)(xlsx@0.18.5) @@ -2210,7 +2214,7 @@ jszip: '*' lodash: '*' senior-request: '*' - vue: '*' + vue: 3.5.11 vue-router: '*' xlsx: '*' xlsx-style: '*' @@ -2243,7 +2247,7 @@ path-browserify: '*' path-to-regexp: '*' pinia: '*' - vue: '*' + vue: 3.5.11 vue-router: '*' dependencies: '@bole-core/core': 1.0.2(@ywwlmm/openapi@0.0.3)(ali-oss@6.21.0)(axios@1.7.7)(dayjs@1.11.6)(element-plus@2.8.4)(file-saver@2.0.5)(jszip@3.10.1)(lodash@4.17.21)(senior-request@1.0.1)(vue-router@4.4.5)(vue@3.5.11)(xlsx-style@0.8.13)(xlsx@0.18.5) @@ -2280,7 +2284,7 @@ resolution: {integrity: sha512-33Cfr0zjbc3Dd8d5b1IgzXRAgXH0c2Gv19VI4snS25V/x9Z41eg769tC+Us1x+vqgQQhgD5YUjLnkpkrQfeMSw==} peerDependencies: qrcode: ^1.5.0 - vue: ^3.0.0 + vue: 3.5.11 dependencies: qrcode: 1.5.4 vue: 3.5.11(typescript@4.8.4) @@ -2928,7 +2932,7 @@ /@element-plus/icons-vue@2.3.1(vue@3.5.11): resolution: {integrity: sha512-XxVUZv48RZAd87ucGS48jPf6pKu0yV5UCg9f4FFwtrYxXOwWuVJo6wOvSLKEoMQKjv8GsX/mhP6UsC1lRwbUWg==} peerDependencies: - vue: ^3.2.0 + vue: 3.5.11 dependencies: vue: 3.5.11(typescript@4.8.4) dev: false @@ -3288,7 +3292,7 @@ /@iconify/vue@4.0.0(vue@3.5.11): resolution: {integrity: sha512-73z81Yf2HISfehu3qvN9GqL1OnUO7wEMKkiFwVGJ2pqAdGCR8FrVylhRhka+6U+gFLlng0ynnT20svk3jJYwow==} peerDependencies: - vue: '>=3' + vue: 3.5.11 dependencies: '@iconify/types': 2.0.0 vue: 3.5.11(typescript@4.8.4) @@ -4042,7 +4046,7 @@ dependencies: '@babel/core': 7.25.7 postcss: 7.0.39 - postcss-syntax: 0.36.2(postcss-html@0.36.0)(postcss-jsx@0.36.4)(postcss-less@3.1.4)(postcss-markdown@0.36.0)(postcss-scss@2.1.1)(postcss@7.0.39) + postcss-syntax: 0.36.2(postcss-html@0.36.0)(postcss-less@3.1.4)(postcss-scss@2.1.1)(postcss@7.0.39) transitivePeerDependencies: - supports-color dev: false @@ -4055,7 +4059,7 @@ postcss-syntax: '>=0.36.2' dependencies: postcss: 7.0.39 - postcss-syntax: 0.36.2(postcss-html@0.36.0)(postcss-jsx@0.36.4)(postcss-less@3.1.4)(postcss-markdown@0.36.0)(postcss-scss@2.1.1)(postcss@7.0.39) + postcss-syntax: 0.36.2(postcss-html@0.36.0)(postcss-less@3.1.4)(postcss-scss@2.1.1)(postcss@7.0.39) remark: 13.0.0 unist-util-find-all-after: 3.0.2 transitivePeerDependencies: @@ -4081,7 +4085,7 @@ resolution: {integrity: sha512-QzCQ94g2oZQcEfI4nfqa6Qr3aFXtXiEH17Jho+QFl73c7epqsWNcyP3ovF1fgJz5jEOE5OYtwgkoaRKIRaSigg==} peerDependencies: '@vue/composition-api': ^1.1.2 - vue: ^2.5.0 || ^3.0.0 + vue: 3.5.11 peerDependenciesMeta: '@vue/composition-api': optional: true @@ -4093,60 +4097,76 @@ vue-demi: 0.13.11(vue@3.5.11) dev: false - /@tencentcloud/call-uikit-vue2.6@3.3.9(react-native@0.76.5)(react@19.0.0)(vue@3.5.11): - resolution: {integrity: sha512-EWXc+wqGXlWSmkR/ucKdwPpe+tOXwtYDL2wUD3C/XW4pmKldtxRIIWIzDzo9upPTeojZMfIIoOC/che7wwE9KQ==} + /@tencentcloud/call-engine-js@3.0.0(react-native@0.76.5)(react@19.0.0): + resolution: {integrity: sha512-xu1MPvn1i1iKMex4pdnuDXPggHOCoFEFPuV0ICOWxRoYGy+zLmRsmMLoX6VjLgwrFCEfzw+uYubCcbmDiC93QA==} dependencies: '@tencentcloud/chat': 3.5.2(react-native@0.76.5)(react@19.0.0) - '@tencentcloud/tui-core': 2.4.0(react-native@0.76.5)(react@19.0.0) + core-js: 3.38.1 + eventemitter3: 4.0.7 + rtc-detect: 0.0.5 + trtc-cloud-js-sdk: 2.9.0 + tuikit-logger: 0.0.4-beta.1 + transitivePeerDependencies: + - react + - react-native + dev: false + + /@tencentcloud/call-uikit-vue2.6@4.0.4(react-native@0.76.5)(react@19.0.0)(vue@3.5.11): + resolution: {integrity: sha512-QZKJAhNbPPkM3MgN5Aj+KENHhy+dH6J8pZoMBIBlapfJGFnX4QF9uT2kJwZvuBOQH+67JbO55y8TG6j+NDr2ng==} + dependencies: + '@tencentcloud/call-engine-js': 3.0.0(react-native@0.76.5)(react@19.0.0) + '@tencentcloud/chat': 3.5.2(react-native@0.76.5)(react@19.0.0) + '@tencentcloud/tui-core': 2.4.0 '@vue/composition-api': 1.7.2(vue@3.5.11) - tuicall-engine-webrtc: 3.1.6(react-native@0.76.5)(react@19.0.0) transitivePeerDependencies: - react - react-native - vue dev: false - /@tencentcloud/call-uikit-vue2@3.3.9(react-native@0.76.5)(react@19.0.0): - resolution: {integrity: sha512-xAa1eQGoYj6PKoaSLxNXHPXTO5A/ld8A5Oy9Ps3qjEQWaOIkei8cqJfRX5tUJiQSeNJAxME/GrqLueIARshnTg==} + /@tencentcloud/call-uikit-vue2@4.0.4(react-native@0.76.5)(react@19.0.0): + resolution: {integrity: sha512-suCHF5/IIsLgioqIFra7enpjfjKTQoNMDdp4CVJ7ogvecyueR/pzrcCu2o3pR5FpMrvCxIpczWSeQbPx5rnSKQ==} dependencies: + '@tencentcloud/call-engine-js': 3.0.0(react-native@0.76.5)(react@19.0.0) '@tencentcloud/chat': 3.5.2(react-native@0.76.5)(react@19.0.0) - '@tencentcloud/tui-core': 2.4.0(react-native@0.76.5)(react@19.0.0) - tuicall-engine-webrtc: 3.1.6(react-native@0.76.5)(react@19.0.0) + '@tencentcloud/tui-core': 2.4.0 transitivePeerDependencies: - react - react-native dev: false - /@tencentcloud/call-uikit-vue@3.1.5(react-native@0.76.5)(react@19.0.0): + /@tencentcloud/call-uikit-vue@3.1.5: resolution: {integrity: sha512-xblFYyol6rXMYKv5NAy45K/VwGIKPCheqUevjoE3Jt7dVqYQMdlXkbWcjcoY1lVmr2545Ej2QN0Xo+PGAHkD1g==} dependencies: - '@tencentcloud/tui-core': 2.4.0(react-native@0.76.5)(react@19.0.0) - tuicall-engine-webrtc: 3.1.6(react-native@0.76.5)(react@19.0.0) - transitivePeerDependencies: - - react - - react-native + '@tencentcloud/tui-core': 2.4.0 + tuicall-engine-webrtc: 3.1.7 dev: false - /@tencentcloud/call-uikit-vue@3.3.9(react-native@0.76.5)(react@19.0.0): - resolution: {integrity: sha512-fFwQSAU+PVqantxbabRZa268BBBcv+hIX265Ag3ogYcrKq/hEo8XyH7nkjZL8wkQ2hFvnkwUgMMLXVeAgyMsng==} + /@tencentcloud/call-uikit-vue@4.0.4(react-native@0.76.5)(react@19.0.0): + resolution: {integrity: sha512-U7WC1HTr5rYnP2xFmpbOVCqa5ErWUMyDPNRNxSdbdrh4nML27VYqR4FWkGEFnm1+ZL2wVe3eE6W5XpmIlUgwoA==} dependencies: + '@tencentcloud/call-engine-js': 3.0.0(react-native@0.76.5)(react@19.0.0) '@tencentcloud/chat': 3.5.2(react-native@0.76.5)(react@19.0.0) - '@tencentcloud/tui-core': 2.4.0(react-native@0.76.5)(react@19.0.0) - tuicall-engine-webrtc: 3.1.6(react-native@0.76.5)(react@19.0.0) + '@tencentcloud/tui-core': 2.4.0 transitivePeerDependencies: - react - react-native dev: false - /@tencentcloud/chat-uikit-engine@2.4.0(react-native@0.76.5)(react@19.0.0): + /@tencentcloud/chat-uikit-engine@2.4.0: resolution: {integrity: sha512-zE+bygEROaqgeMXXO+X2+2x8JH55mnb9c1sYQVQ507FlFT0maHxEQPOq8/EZBWowUDDlYoWbHh1EBAXEAI3dgA==} dependencies: - '@tencentcloud/chat': 3.5.2(react-native@0.76.5)(react@19.0.0) + '@tencentcloud/chat': 3.5.3 tim-profanity-filter-plugin: 1.1.0 tim-upload-plugin: 1.4.2 - transitivePeerDependencies: - - react - - react-native + dev: false + + /@tencentcloud/chat-uikit-engine@2.4.2: + resolution: {integrity: sha512-L5rr1mO98S1Uz5IndJ2QdGv++5zbSUTnGSz4x3rKx5lWXlcJzSo1RY9DxYcWTKQKos9bG2d4JIIeg4DlfGb+Pg==} + dependencies: + '@tencentcloud/chat': 3.5.3 + tim-profanity-filter-plugin: 1.1.0 + tim-upload-plugin: 1.4.2 dev: false /@tencentcloud/chat-uikit-vue@2.0.0(@tiptap/core@2.1.13)(@tiptap/extension-document@2.1.13)(@tiptap/extension-image@2.1.13)(@tiptap/extension-mention@2.1.13)(@tiptap/extension-paragraph@2.1.13)(@tiptap/extension-placeholder@2.1.13)(@tiptap/extension-text@2.1.13)(@tiptap/pm@2.1.13)(@tiptap/suggestion@2.1.13)(react-native@0.76.5)(react@19.0.0)(vue@3.5.11): @@ -4162,11 +4182,11 @@ '@tiptap/pm': ^2.0.0-beta.220 '@tiptap/suggestion': ^2.0.0-beta.220 dependencies: - '@tencentcloud/call-uikit-vue': 3.3.9(react-native@0.76.5)(react@19.0.0) - '@tencentcloud/call-uikit-vue2': 3.3.9(react-native@0.76.5)(react@19.0.0) - '@tencentcloud/call-uikit-vue2.6': 3.3.9(react-native@0.76.5)(react@19.0.0)(vue@3.5.11) - '@tencentcloud/chat-uikit-engine': 2.4.0(react-native@0.76.5)(react@19.0.0) - '@tencentcloud/tui-core': 2.4.0(react-native@0.76.5)(react@19.0.0) + '@tencentcloud/call-uikit-vue': 4.0.4(react-native@0.76.5)(react@19.0.0) + '@tencentcloud/call-uikit-vue2': 4.0.4(react-native@0.76.5)(react@19.0.0) + '@tencentcloud/call-uikit-vue2.6': 4.0.4(react-native@0.76.5)(react@19.0.0)(vue@3.5.11) + '@tencentcloud/chat-uikit-engine': 2.4.2 + '@tencentcloud/tui-core': 2.4.0 '@tencentcloud/tui-customer-service-plugin': 2.2.6(@tencentcloud/tui-core@2.4.0)(vue@3.5.11) '@tiptap/core': 2.1.13(@tiptap/pm@2.1.13) '@tiptap/extension-document': 2.1.13(@tiptap/core@2.1.13) @@ -4191,15 +4211,19 @@ /@tencentcloud/chat@3.5.2(react-native@0.76.5)(react@19.0.0): resolution: {integrity: sha512-UuGswGE3jaPgAFHA5kMDASI4Vq5p3lzeK9YisN5kkl9dcxh7BKbxTp5qtD8Fy7tj4VcWbytCb6ytCufmThbDXA==} dependencies: - '@tencentcloud/react-native-push': 1.1.0(react-native@0.76.5)(react@19.0.0) - '@tencentcloud/uni-app-push': 1.1.0 + '@tencentcloud/react-native-push': 1.2.0(react-native@0.76.5)(react@19.0.0) + '@tencentcloud/uni-app-push': 1.2.0 transitivePeerDependencies: - react - react-native dev: false - /@tencentcloud/react-native-push@1.1.0(react-native@0.76.5)(react@19.0.0): - resolution: {integrity: sha512-6TvPhNnKrBvd6j9dUwFLpkmV9WkdkaQstNvzdK1nIWQgWCTJGFnyiNDEn8zwN2VZkG+MzjYwNqMcVkMMU9Ao2g==} + /@tencentcloud/chat@3.5.3: + resolution: {integrity: sha512-1iC9CW+8sMcUtZXjB+97N65uyqRAV73InfKCzXtU/igxPqT8nfzfkrcjhi7JfywaKR3jGC1j8tDpsFNlLepFqQ==} + dev: false + + /@tencentcloud/react-native-push@1.2.0(react-native@0.76.5)(react@19.0.0): + resolution: {integrity: sha512-/GI4J1LNnbCz1LxJ6WHtYhymoVg8ot5gASJ9o/YczgghynnZf7b9rfe2d8Z43YjhPog9Rx1Jfdqb3WVa8T7w0A==} peerDependencies: react: '*' react-native: '>= 0.75' @@ -4208,26 +4232,20 @@ react-native: 0.76.5(@babel/core@7.25.7)(@babel/preset-env@7.25.8)(react@19.0.0) dev: false - /@tencentcloud/tui-core@2.0.0(react-native@0.76.5)(react@19.0.0): + /@tencentcloud/tui-core@2.0.0: resolution: {integrity: sha512-KBwDFWFV+IGtAZ82uCjRi891nMQcAen0wZHdPUUTSNHaWGjYiwOAHD7yw4gC1c5DYqVYMa3tVA7bSBd/hKVZKg==} dependencies: - '@tencentcloud/chat': 3.5.2(react-native@0.76.5)(react@19.0.0) + '@tencentcloud/chat': 3.5.3 tim-profanity-filter-plugin: 0.9.0 tim-upload-plugin: 1.3.0 - transitivePeerDependencies: - - react - - react-native dev: false - /@tencentcloud/tui-core@2.4.0(react-native@0.76.5)(react@19.0.0): + /@tencentcloud/tui-core@2.4.0: resolution: {integrity: sha512-OFXHoi8CQlPtWvNRLApg0wonWbW79uoTgAqqffqWO1icx3xDYd2RZDHMzpBexOsE3CHpWokrfXrqiXkpOmYWew==} dependencies: - '@tencentcloud/chat': 3.5.2(react-native@0.76.5)(react@19.0.0) + '@tencentcloud/chat': 3.5.3 tim-profanity-filter-plugin: 1.1.0 tim-upload-plugin: 1.4.2 - transitivePeerDependencies: - - react - - react-native dev: false /@tencentcloud/tui-customer-service-plugin@2.2.6(@tencentcloud/tui-core@2.4.0)(vue@3.5.11): @@ -4235,19 +4253,19 @@ peerDependencies: '@tencentcloud/tui-core': latest '@vue/composition-api': ^1.0.0-rc.1 - vue: ^2.0.0 || >=3.0.0 + vue: 3.5.11 peerDependenciesMeta: '@vue/composition-api': optional: true dependencies: - '@tencentcloud/tui-core': 2.4.0(react-native@0.76.5)(react@19.0.0) + '@tencentcloud/tui-core': 2.4.0 '@tencentcloud/universal-api': 2.4.0 marked: 4.0.0 vue: 3.5.11(typescript@4.8.4) dev: false - /@tencentcloud/uni-app-push@1.1.0: - resolution: {integrity: sha512-9z8zgAxExwuxzuxq1sFK3jmRJOKG/BNL8i9v+a3jVK/R7XL7ROE5EPWh4gRYABb9DC48NK9hwx2RFqPTlbR/xg==} + /@tencentcloud/uni-app-push@1.2.0: + resolution: {integrity: sha512-l+hTZ4IkfgTqVLkDMWaJyAdTSM6HArPZ1PYi/V7j21XwsIJh21bEBGQ6UwojuRlOIbQDuZ32o+ZkjcVn2Gj8HA==} engines: {HBuilderX: ^3.6.8} dev: false @@ -5048,7 +5066,7 @@ peerDependencies: '@types/video.js': 7.x video.js: 7.x - vue: 3.x + vue: 3.5.11 dependencies: '@types/video.js': 7.3.49 video.js: 7.20.3 @@ -5114,7 +5132,7 @@ engines: {node: ^18.0.0 || >=20.0.0} peerDependencies: vite: ^5.0.0 - vue: ^3.0.0 + vue: 3.5.11 dependencies: '@babel/core': 7.25.7 '@babel/plugin-transform-typescript': 7.24.7(@babel/core@7.25.7) @@ -5130,7 +5148,7 @@ engines: {node: ^18.0.0 || >=20.0.0} peerDependencies: vite: ^5.0.0 - vue: ^3.2.25 + vue: 3.5.11 dependencies: vite: 5.4.8(@types/node@18.7.18)(sass@1.55.0)(terser@5.34.1) vue: 3.5.11(typescript@4.8.4) @@ -5278,7 +5296,7 @@ /@vue/composition-api@1.7.2(vue@3.5.11): resolution: {integrity: sha512-M8jm9J/laYrYT02665HkZ5l2fWTK4dcVg3BsDHm/pfz+MjDYwX+9FUaZyGwEyXEDonQYRCo0H7aLgdklcIELjw==} peerDependencies: - vue: '>= 2.5 < 2.7' + vue: 3.5.11 dependencies: vue: 3.5.11(typescript@4.8.4) dev: false @@ -5406,7 +5424,7 @@ resolution: {integrity: sha512-B/Mdj9TK1peFyWaPof+Zf/mP9XuGAngaJZBwPaXBvU3aCTZlx3ltlrFFFyMV4iGBwsjSCeUCgZrtkEj9dS2Y3Q==} peerDependencies: '@vue/composition-api': ^1.1.0 - vue: ^2.6.0 || ^3.2.0 + vue: 3.5.11 peerDependenciesMeta: '@vue/composition-api': optional: true @@ -5447,7 +5465,7 @@ resolution: {integrity: sha512-cAZqXexLX6xo+H1N1Mv+wBSSqG4wB+BdjIuHQ50jwlelXCDxSi8gj0K/9nDS+aUZtWh6YMwS6UGCKg58jMVglA==} peerDependencies: '@vue/composition-api': ^1.4.1 - vue: ^2.0.0 || >=3.0.0-rc.0 + vue: 3.5.11 peerDependenciesMeta: '@vue/composition-api': optional: true @@ -5473,7 +5491,7 @@ resolution: {integrity: sha512-wt+T30c4K6dGRMVqPddexEVLa28YwxW5OFIPmzUHICjphfAuBFTTdDoyqREZNDOFJZ44ARH1WWQNCUK8koJ+Ag==} peerDependencies: '@vue/composition-api': ^1.1.0 - vue: ^2.6.0 || ^3.2.0 + vue: 3.5.11 peerDependenciesMeta: '@vue/composition-api': optional: true @@ -5571,7 +5589,7 @@ resolution: {integrity: sha512-Xkrdo590AhLHvzyR+U246t6T89nIWHz1weAgMuo8jEA2HS5RiUnsA4U6+iUGaQ2E5c8mYQaeNqzHQXUp9Okbiw==} peerDependencies: '@wangeditor-next/editor': '>=5.1.0' - vue: ^3.0.5 + vue: 3.5.11 dependencies: '@wangeditor-next/editor': 5.3.14 vue: 3.5.11(typescript@4.8.4) @@ -7966,7 +7984,6 @@ domelementtype: 2.3.0 domhandler: 5.0.3 entities: 4.5.0 - dev: true /dom-walk@0.1.2: resolution: {integrity: sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==} @@ -8001,7 +8018,6 @@ engines: {node: '>= 4'} dependencies: domelementtype: 2.3.0 - dev: true /domutils@1.7.0: resolution: {integrity: sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==} @@ -8023,7 +8039,6 @@ dom-serializer: 2.0.0 domelementtype: 2.3.0 domhandler: 5.0.3 - dev: true /dot-case@3.0.4: resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} @@ -8097,7 +8112,7 @@ /element-plus@2.8.4(vue@3.5.11): resolution: {integrity: sha512-ZlVAdUOoJliv4kW3ntWnnSHMT+u/Os7mXJjk2xzOlqNeHaI2/ozlF+R58ZCEak8ZnDi6+5A2viWEYRsq64IuiA==} peerDependencies: - vue: ^3.2.0 + vue: 3.5.11 dependencies: '@ctrl/tinycolor': 3.4.1 '@element-plus/icons-vue': 2.3.1(vue@3.5.11) @@ -9026,6 +9041,10 @@ /event-target-shim@5.0.1: resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} engines: {node: '>=6'} + dev: false + + /eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} dev: false /execa@5.1.1: @@ -9998,7 +10017,6 @@ domhandler: 5.0.3 domutils: 3.0.1 entities: 4.5.0 - dev: true /http-errors@2.0.0: resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} @@ -10902,7 +10920,6 @@ /js-tokens@8.0.0: resolution: {integrity: sha512-PC7MzqInq9OqKyTXfIvQNcjMkODJYC8A17kAaQgeW79yfhqTWSOfjHYQ2mDDcwJ96Iibtwkfh0C7R/OvqPlgVA==} - dev: true /js-tokens@9.0.0: resolution: {integrity: sha512-WriZw1luRMlmV3LGJaR6QOJjWwgLUTf89OwT2lUOyjX2dJGBwgmIkbcz+7WFZjrZM635JOIR517++e/67CP9dQ==} @@ -12209,7 +12226,6 @@ resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - dev: true /nanoid@3.3.7: resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} @@ -13033,7 +13049,6 @@ /picocolors@1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - dev: true /picocolors@1.1.0: resolution: {integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==} @@ -13073,7 +13088,7 @@ peerDependencies: '@vue/composition-api': ^1.4.0 typescript: '>=4.4.4' - vue: ^2.6.14 || ^3.3.0 + vue: 3.5.11 peerDependenciesMeta: '@vue/composition-api': optional: true @@ -13314,7 +13329,7 @@ dependencies: htmlparser2: 3.10.1 postcss: 7.0.39 - postcss-syntax: 0.36.2(postcss-html@0.36.0)(postcss-jsx@0.36.4)(postcss-less@3.1.4)(postcss-markdown@0.36.0)(postcss-scss@2.1.1)(postcss@7.0.39) + postcss-syntax: 0.36.2(postcss-html@0.36.0)(postcss-less@3.1.4)(postcss-scss@2.1.1)(postcss@7.0.39) dev: false /postcss-html@1.5.0: @@ -13325,7 +13340,6 @@ js-tokens: 8.0.0 postcss: 8.4.18 postcss-safe-parser: 6.0.0(postcss@8.4.18) - dev: true /postcss-image-set-function@7.0.0(postcss@8.4.18): resolution: {integrity: sha512-QL7W7QNlZuzOwBTeXEmbVckNt1FSmhQtbMRvGGqqU4Nf4xk6KUEQhAoWuMzwbSv5jxiRiSZ5Tv7eiDB9U87znA==} @@ -13358,7 +13372,7 @@ dependencies: '@babel/core': 7.25.7 postcss: 7.0.39 - postcss-syntax: 0.36.2(postcss-html@0.36.0)(postcss-jsx@0.36.4)(postcss-less@3.1.4)(postcss-markdown@0.36.0)(postcss-scss@2.1.1)(postcss@7.0.39) + postcss-syntax: 0.36.2(postcss-html@1.5.0)(postcss-scss@4.0.5)(postcss@8.4.18) transitivePeerDependencies: - supports-color dev: false @@ -13401,7 +13415,7 @@ postcss-syntax: '>=0.36.0' dependencies: postcss: 7.0.39 - postcss-syntax: 0.36.2(postcss-html@0.36.0)(postcss-jsx@0.36.4)(postcss-less@3.1.4)(postcss-markdown@0.36.0)(postcss-scss@2.1.1)(postcss@7.0.39) + postcss-syntax: 0.36.2(postcss-html@1.5.0)(postcss-scss@4.0.5)(postcss@8.4.18) remark: 10.0.1 unist-util-find-all-after: 1.0.5 dev: false @@ -13588,7 +13602,6 @@ postcss: ^8.3.3 dependencies: postcss: 8.4.18 - dev: true /postcss-sass@0.3.5: resolution: {integrity: sha512-B5z2Kob4xBxFjcufFnhQ2HqJQ2y/Zs/ic5EZbCywCkxKd756Q40cIQ/veRDwSrw1BF6+4wUgmpm0sBASqVi65A==} @@ -13618,7 +13631,6 @@ postcss: ^8.3.3 dependencies: postcss: 8.4.18 - dev: true /postcss-selector-not@8.0.0(postcss@8.4.18): resolution: {integrity: sha512-g/juh7A83GWc3+kWL8BiS3YUIJb3XNqIVKz1kGvgN3OhoGCsPncy1qo/+q61tjy5r87OxBhSY1+hcH3yOhEW+g==} @@ -13678,7 +13690,7 @@ postcss: 8.4.18 dev: true - /postcss-syntax@0.36.2(postcss-html@0.36.0)(postcss-jsx@0.36.4)(postcss-less@3.1.4)(postcss-markdown@0.36.0)(postcss-scss@2.1.1)(postcss@7.0.39): + /postcss-syntax@0.36.2(postcss-html@0.36.0)(postcss-less@3.1.4)(postcss-scss@2.1.1)(postcss@7.0.39): resolution: {integrity: sha512-nBRg/i7E3SOHWxF3PpF5WnJM/jQ1YpY9000OaVXlAQj6Zp/kIqJxEDWIZ67tAd7NLuk7zqN4yqe9nc0oNAOs1w==} peerDependencies: postcss: '>=5.0.0' @@ -13701,10 +13713,34 @@ dependencies: postcss: 7.0.39 postcss-html: 0.36.0(postcss-syntax@0.36.2)(postcss@7.0.39) - postcss-jsx: 0.36.4(postcss-syntax@0.36.2)(postcss@7.0.39) postcss-less: 3.1.4 - postcss-markdown: 0.36.0(postcss-syntax@0.36.2)(postcss@7.0.39) postcss-scss: 2.1.1 + dev: false + + /postcss-syntax@0.36.2(postcss-html@1.5.0)(postcss-scss@4.0.5)(postcss@8.4.18): + resolution: {integrity: sha512-nBRg/i7E3SOHWxF3PpF5WnJM/jQ1YpY9000OaVXlAQj6Zp/kIqJxEDWIZ67tAd7NLuk7zqN4yqe9nc0oNAOs1w==} + peerDependencies: + postcss: '>=5.0.0' + postcss-html: '*' + postcss-jsx: '*' + postcss-less: '*' + postcss-markdown: '*' + postcss-scss: '*' + peerDependenciesMeta: + postcss-html: + optional: true + postcss-jsx: + optional: true + postcss-less: + optional: true + postcss-markdown: + optional: true + postcss-scss: + optional: true + dependencies: + postcss: 8.4.18 + postcss-html: 1.5.0 + postcss-scss: 4.0.5(postcss@8.4.18) dev: false /postcss-value-parser@3.3.1: @@ -13739,7 +13775,6 @@ nanoid: 3.3.4 picocolors: 1.0.0 source-map-js: 1.0.2 - dev: true /postcss@8.4.47: resolution: {integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==} @@ -14800,6 +14835,10 @@ resolution: {integrity: sha512-53e/4a4lT96K004mqDnLDE+upNSpBLRMfFgYCeIw3Gvuw9F17nxLP5v8MOVLly4/Epomxkx4SXrOFJJMxD2pIw==} dev: false + /rtc-detect@0.0.5: + resolution: {integrity: sha512-VANIELbaoIkZRj4gyiCCbTM+/ASy0eNgF35jCs+rrGxzYvD7YIBajEbGGZeh+5ZCNAX8/rT8IVRdpuallf174Q==} + dev: false + /run-applescript@7.0.0: resolution: {integrity: sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==} engines: {node: '>=18'} @@ -14983,7 +15022,7 @@ file-saver: '*' lodash: '*' semver: '*' - vue: '*' + vue: 3.5.11 xlsx: '*' xlsx-style: '*' dependencies: @@ -15011,7 +15050,7 @@ mitt: '*' semver: '*' senin-help: '*' - vue: '*' + vue: 3.5.11 dependencies: '@tanstack/vue-query': 4.37.1(vue@3.5.11) axios: 1.7.7 @@ -15342,7 +15381,6 @@ /source-map-js@1.0.2: resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} engines: {node: '>=0.10.0'} - dev: true /source-map-js@1.2.1: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} @@ -15899,7 +15937,7 @@ postcss-sass: 0.4.4 postcss-scss: 2.1.1 postcss-selector-parser: 6.1.1 - postcss-syntax: 0.36.2(postcss-html@0.36.0)(postcss-jsx@0.36.4)(postcss-less@3.1.4)(postcss-markdown@0.36.0)(postcss-scss@2.1.1)(postcss@7.0.39) + postcss-syntax: 0.36.2(postcss-html@0.36.0)(postcss-less@3.1.4)(postcss-scss@2.1.1)(postcss@7.0.39) postcss-value-parser: 4.2.0 resolve-from: 5.0.0 slash: 3.0.0 @@ -16006,7 +16044,7 @@ postcss-sass: 0.3.5 postcss-scss: 2.1.1 postcss-selector-parser: 3.1.2 - postcss-syntax: 0.36.2(postcss-html@0.36.0)(postcss-jsx@0.36.4)(postcss-less@3.1.4)(postcss-markdown@0.36.0)(postcss-scss@2.1.1)(postcss@7.0.39) + postcss-syntax: 0.36.2(postcss-html@1.5.0)(postcss-scss@4.0.5)(postcss@8.4.18) postcss-value-parser: 3.3.1 resolve-from: 4.0.0 signal-exit: 3.0.7 @@ -16362,6 +16400,12 @@ trtc-sdk-v5: 5.6.2 dev: false + /trtc-cloud-js-sdk@2.9.0: + resolution: {integrity: sha512-m2gufzg1yqnyPUanLJJXgyPzenRSyH1stK16EDrDINQo1FCPeCmY0kDARF1NiLZJLKm9lUP5DQsrUUKn4LYkPg==} + dependencies: + trtc-sdk-v5: 5.9.1 + dev: false + /trtc-js-sdk@4.15.19: resolution: {integrity: sha512-FFVvaji65d7+aq5o4hE+5lamvL1CEolNTPavaN7sRzh8Bb5UdDieBL9jV+lfxCnYpJ5lMi1YJt+EynDPX20Asw==} dependencies: @@ -16370,6 +16414,12 @@ /trtc-sdk-v5@5.6.2: resolution: {integrity: sha512-Ylt9LePeHyet2+hABcDxKSMTRMY6IVukw72yvRXgpRi2iR/sDLFSKtj+i3EeQ/BJZZWSTuyFXbolHpVJMPxgPg==} + dependencies: + webrtc-adapter: 8.2.3 + dev: false + + /trtc-sdk-v5@5.9.1: + resolution: {integrity: sha512-Vzu1UIzIQtQ3zUQHruha1Zh13aXsDsi/edMdwWdpO8URmRraqftsgKxjR8x2GPHd6p4cDreR/wY50xrWu9ZPlw==} dependencies: webrtc-adapter: 8.2.3 dev: false @@ -16450,15 +16500,16 @@ tslib: 1.14.1 typescript: 4.8.4 - /tuicall-engine-webrtc@3.1.6(react-native@0.76.5)(react@19.0.0): - resolution: {integrity: sha512-NdRwZTHbqp4LnDEoRfQDa7Z1oH4g156j27awgy2PYO4dBtm7EjAJLFKZeaZZzErU67uW4EuSBRMeCeFx91JKpQ==} + /tuicall-engine-webrtc@3.1.7: + resolution: {integrity: sha512-MRye9/x/8Gy5aRAfEACLtGhK5RcBLAev7cgCGi7OLNt0Uj28mEJkt1tHs4p7xTQiQj6vcB+7OVTdsxuSq7EmOA==} dependencies: - '@tencentcloud/chat': 3.5.2(react-native@0.76.5)(react@19.0.0) + '@tencentcloud/chat': 3.5.3 rtc-ai-denoiser: 1.1.7 trtc-cloud-js-sdk: 2.5.0 - transitivePeerDependencies: - - react - - react-native + dev: false + + /tuikit-logger@0.0.4-beta.1: + resolution: {integrity: sha512-Ky83B1p88xakmfZ2f92cU0YxfolyxnQBv14tQpvnuHcMTnVR2Rjy8tityDGwF+pnxrAhJ7H7OPB/4rFdWVncIw==} dev: false /type-check@0.4.0: @@ -16851,7 +16902,7 @@ peerDependencies: '@babel/parser': ^7.15.8 '@nuxt/kit': ^3.2.2 - vue: 2 || 3 + vue: 3.5.11 peerDependenciesMeta: '@babel/parser': optional: true @@ -17342,7 +17393,7 @@ requiresBuild: true peerDependencies: '@vue/composition-api': ^1.0.0-rc.1 - vue: ^3.0.0-0 || ^2.6.0 + vue: 3.5.11 peerDependenciesMeta: '@vue/composition-api': optional: true @@ -17357,7 +17408,7 @@ requiresBuild: true peerDependencies: '@vue/composition-api': ^1.0.0-rc.1 - vue: ^3.0.0-0 || ^2.6.0 + vue: 3.5.11 peerDependenciesMeta: '@vue/composition-api': optional: true @@ -17369,7 +17420,7 @@ peerDependencies: '@vue/runtime-core': ^3.0.0 echarts: ^5.5.1 - vue: ^2.7.0 || ^3.1.1 + vue: 3.5.11 peerDependenciesMeta: '@vue/runtime-core': optional: true @@ -17402,7 +17453,7 @@ /vue-router@4.4.5(vue@3.5.11): resolution: {integrity: sha512-4fKZygS8cH1yCyuabAXGUAsyi1b2/o/OKgu/RUb+znIYOxPRxdkytJEx+0wGcpBE1pX6vUgh5jwWOKRGvuA/7Q==} peerDependencies: - vue: ^3.2.0 + vue: 3.5.11 dependencies: '@vue/devtools-api': 6.6.4 vue: 3.5.11(typescript@4.8.4) @@ -17424,7 +17475,7 @@ resolution: {integrity: sha512-3Wy6QcZl0VusCCHX3vYrWSILFlrOB2EQDoySnuYmASM5cUp1FivJGfkS5lp1CutDgyRb41g32r/1QCmiBj5i1Q==} engines: {node: '>=14.0.0'} peerDependencies: - vue: ^2.0.0 || ^3.0.0 + vue: 3.5.11 peerDependenciesMeta: vue: optional: true @@ -17888,7 +17939,3 @@ /zwitch@1.0.5: resolution: {integrity: sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==} dev: false - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false diff --git a/src/components/Layout/ChunkCellV2.vue b/src/components/Layout/ChunkCellV2.vue new file mode 100644 index 0000000..bcf8b10 --- /dev/null +++ b/src/components/Layout/ChunkCellV2.vue @@ -0,0 +1,40 @@ +<template> + <div class="chunk-cell-v2"> + <div class="chunk-cell-v2-title">{{ props.title }}</div> + <div class="chunk-cell-v2-content"><slot></slot></div> + </div> +</template> + +<script setup lang="ts"> +defineOptions({ + name: 'ChunkCellV2', +}); + +type Props = { + title?: string; +}; + +const props = withDefaults(defineProps<Props>(), { + title: '', +}); +</script> + +<style lang="scss" scoped> +@use '@/style/common.scss' as *; + +.chunk-cell-v2 { + .chunk-cell-v2-title { + height: 48px; + font-size: 16px; + color: getCssVar('text-color', 'primary'); + line-height: 48px; + } + margin-bottom: 24px; + border-bottom: 1px solid getCssVar('border-color', 'lighter'); + + &:last-child { + margin-bottom: 0; + border-bottom: none; + } +} +</style> diff --git a/src/components/commonView/BatchInfoView.vue b/src/components/commonView/BatchInfoView.vue new file mode 100644 index 0000000..b5442c6 --- /dev/null +++ b/src/components/commonView/BatchInfoView.vue @@ -0,0 +1,78 @@ +<template> + <ProFormCol> + <ProFormColItem :span="12"> + <ProFormItemV2 label="鐢虫姤鎵规鍙�:" prop="applyNo"> + <ProFormText placeholder="璇疯緭鍏ョ敵鎶ユ壒娆″彿" v-model.trim="form.categoryName" /> + </ProFormItemV2> + </ProFormColItem> + <ProFormColItem :span="12"> + <ProFormItemV2 label="鐢宠濂栧姳閲戞湀浠�:" prop="applyDate"> + <ProFormDatePicker + v-model="form.categoryName" + format="YYYY-MM" + placeholder="璇烽�夋嫨鏈堜唤" + type="month" + /> + </ProFormItemV2> + </ProFormColItem> + <ProFormColItem :span="12"> + <ProFormItemV2 label="鐢虫姤鍥尯:" prop="applyParkId"> + <ProFormSelect + v-model="form.categoryName" + :valueEnum="[]" + enumLabelKey="name" + enum-value-key="userId" + placeholder="璇烽�夋嫨鐢虫姤鍥尯" + > + </ProFormSelect> + </ProFormItemV2> + </ProFormColItem> + <ProFormColItem :span="12"> + <ProFormItemV2 label="鍥尯绫诲瀷:"> + <ProFormSelect + v-model="form.categoryName" + :valueEnum="parkTypeList" + enumLabelKey="name" + enum-value-key="id" + > + </ProFormSelect> + </ProFormItemV2> + </ProFormColItem> + </ProFormCol> +</template> + +<script setup lang="ts"> +import { + ProFormItemV2, + ProFormCol, + ProFormColItem, + ProFormText, + ProFormDatePicker, + ProFormSelect, + ProFormMixinsItemContainer, +} from '@bole-core/components'; +import { useAllSearchSettingList } from '@/hooks'; +import { SearchType } from '@/constants'; + +defineOptions({ + name: 'BatchInfoView', +}); + +type Props = { + form: { + categoryName: string; + }; +}; + +const props = withDefaults(defineProps<Props>(), {}); + +const { allSearchSettingList: parkTypeList } = useAllSearchSettingList({ + searchType: SearchType.Park, + enabled: true, + status: true, +}); +</script> + +<style lang="scss" scoped> +@use '@/style/common.scss' as *; +</style> diff --git a/src/components/commonView/DeclareEnterpriseTableView.vue b/src/components/commonView/DeclareEnterpriseTableView.vue new file mode 100644 index 0000000..d05884c --- /dev/null +++ b/src/components/commonView/DeclareEnterpriseTableView.vue @@ -0,0 +1,145 @@ +<template> + <ProTableQueryFilterBar @on-reset="reset"> + <template #query> + <QueryFilterItem> + <SearchInput + v-model="extraParamState.title" + style="width: 250px" + placeholder="浼佷笟鍚�/淇$敤浠g爜" + @on-click-search="getList" + > + </SearchInput> + </QueryFilterItem> + </template> + </ProTableQueryFilterBar> + <ProTableV2 + v-bind="proTableProps" + :columns="column" + :operationBtns="operationBtns" + :autoHeight="false" + :tableProps="{ + maxHeight: '400px', + }" + > + </ProTableV2> + <MateriaDetailDialog v-bind="dialogProps"></MateriaDetailDialog> +</template> + +<script setup lang="ts"> +import { + ProTableQueryFilterBar, + QueryFilterItem, + ProTableV2, + SearchInput, + useFormDialog, + useTable, + defineOperationBtns, + defineColumns, +} from '@bole-core/components'; +import MateriaDetailDialog from './MateriaDetailDialog.vue'; +import { FourStreamsMaterialFileTableItem } from './types'; +import { OrderInputType } from '@bole-core/core'; +import * as informationServices from '@/services/api/Information'; + +defineOptions({ + name: 'DeclareEnterpriseTableView', +}); + +type Props = {}; + +const props = withDefaults(defineProps<Props>(), {}); + +const column = defineColumns([ + { + id: '1', + enCode: 'accDateTime', + name: '浜ゆ槗鏃堕棿', + }, + { + id: '2', + enCode: 'income', + name: '鏀跺叆', + }, + { + id: '3', + enCode: 'outcome', + name: '鏀嚭', + }, + { + id: '4', + enCode: 'acctBalance', + name: '璐︽埛浣欓', + }, + { + id: '5', + enCode: 'counterpartyAcctNoAndName', + name: '瀵规柟璐﹀彿/鎴峰悕', + }, + { + id: '6', + enCode: 'purpose', + name: '鐢ㄩ��', + }, +]); + +const operationBtns = defineOperationBtns([ + { + data: { + enCode: 'detailBtn', + name: '璇︽儏', + }, + emits: { + onClick: (role) => openDialog(role), + }, + }, +]); + +const { + getDataSource: getList, + proTableProps, + paginationState, + extraParamState, + reset, +} = useTable( + async ({ pageIndex, pageSize }, extraParamState) => { + try { + let params: API.GetInformationForManageInput = { + pageModel: { + rows: pageSize, + page: pageIndex, + orderInput: extraParamState.orderInput, + }, + title: extraParamState.title, + }; + let res = await informationServices.getInformationForManage(params); + return res; + } catch (error) {} + }, + { + defaultExtraParams: { + orderInput: [{ property: 'creationTime', order: OrderInputType.Desc }], + title: '', + }, + } +); + +const { dialogProps, handleEdit, editForm } = useFormDialog({ + defaultFormParams: { + list: [] as FourStreamsMaterialFileTableItem[], + }, +}); + +function openDialog(row?: API.IncentivePaymentsManageListOutput) { + handleEdit({ + list: [], + }); +} + +defineExpose({ + getList, +}); +</script> + +<style lang="scss" scoped> +@use '@/style/common.scss' as *; +</style> diff --git a/src/components/commonView/DetailView.vue b/src/components/commonView/DetailView.vue new file mode 100644 index 0000000..a473325 --- /dev/null +++ b/src/components/commonView/DetailView.vue @@ -0,0 +1,63 @@ +<template> + <ProForm :model="form" label-width="160px" label-position="left" is-read> + <ChunkCellV2 title="鏉愭枡瀹℃牳"> + <BatchInfoView :form="form"></BatchInfoView> + </ChunkCellV2> + <ChunkCellV2 title="姹囨�绘潗鏂�"> + <MaterialInfoView :form="form"></MaterialInfoView> + </ChunkCellV2> + <ChunkCellV2 title="姹囩畻鏉愭枡"> + <SettlementMaterialInfoView :form="form"></SettlementMaterialInfoView> + </ChunkCellV2> + <ChunkCellV2 title="鐢虫姤浼佷笟鍚嶅崟" class="chunk-cell-table"> + <slot name="table"> </slot> + </ChunkCellV2> + <ChunkCell v-if="hasForm"> + <slot name="form"></slot> + </ChunkCell> + </ProForm> +</template> + +<script setup lang="ts"> +import { ProForm, UploadUserFile, ChunkCell } from '@bole-core/components'; +import ChunkCellV2 from '@/components/Layout/ChunkCellV2.vue'; +import BatchInfoView from './BatchInfoView.vue'; +import MaterialInfoView from './MaterialInfoView.vue'; +import SettlementMaterialInfoView from './SettlementMaterialInfoView.vue'; +import DeclareEnterpriseTableView from './DeclareEnterpriseTableView.vue'; + +defineOptions({ + name: 'DetailView', +}); + +type Props = { + hasForm?: boolean; + form?: { + categoryName: string; + amount: number; + url: UploadUserFile[]; + }; +}; + +const props = withDefaults(defineProps<Props>(), { + hasForm: false, +}); +</script> + +<style lang="scss" scoped> +@use '@/style/common.scss' as *; + +.page-form-layout { + .el-form { + padding-bottom: 22px; + } + + .chunk-cell-table { + :deep() { + .chunk-cell-v2-content { + margin-bottom: 30px; + } + } + } +} +</style> diff --git a/src/components/commonView/FourStreamsMaterialFileTable.vue b/src/components/commonView/FourStreamsMaterialFileTable.vue new file mode 100644 index 0000000..c109630 --- /dev/null +++ b/src/components/commonView/FourStreamsMaterialFileTable.vue @@ -0,0 +1,179 @@ +<template> + <div> + <ProTableV2 + :tableData="list" + :columns="columns" + :autoHeight="false" + :operationBtns="operationBtns" + :operationColumnWidth="240" + :showTableColumnSetting="false" + > + <template #fileBusinessType="{ row }"> + {{ AllEnterpriseMaterialFileBusinessTypeEnumText[row.fileBusinessType] }} + </template> + <template #operationBtn-uploadBtn="{ data, row }"> + <BlFileUpload + v-model:file-url="row.fileList" + multiple + :limit="1" + ref="uploadRef" + :showTip="false" + :show-file-list="false" + class="pro-table-operation-btn upload-style-btn" + > + <el-button text type="primary" class="pro-table-operation-btn">涓婁紶</el-button> + </BlFileUpload> + </template> + </ProTableV2> + </div> +</template> + +<script setup lang="ts"> +import { FourStreamsMaterialFileTableProps, FourStreamsMaterialFileTableItem } from './types'; +import { + ProTableV2, + defineColumns, + defineOperationBtns, + BlFileUpload, + bolePreview, +} from '@bole-core/components'; +import { AllEnterpriseMaterialFileBusinessTypeEnumText } from '@/constants'; +import { downloadFileByUrl } from '@/utils'; +import { Message, isFileCanPreview } from '@bole-core/core'; + +defineOptions({ + name: 'FourStreamsMaterialFileTable', +}); + +const props = withDefaults(defineProps<FourStreamsMaterialFileTableProps>(), { + showUploadBtn: true, + showCheckBtn: true, + showDownloadBtn: true, + showDeleteBtn: true, +}); + +const list = defineModel<FourStreamsMaterialFileTableItem[]>('list'); + +const columns = defineColumns([ + { + id: '1', + enCode: 'fileBusinessType', + name: '鏉愭枡鍚嶇О', + }, +]); + +const operationBtns = defineOperationBtns([ + { + data: { + enCode: 'uploadBtn', + name: '涓婁紶', + }, + extraProps: { + hide: (row: FourStreamsMaterialFileTableItem) => { + if (!props.showUploadBtn) return true; + let fileList = row?.fileList?.filter?.((item) => item.status === 'success'); + return fileList?.length > 0; + }, + }, + }, + { + data: { + enCode: 'detailBtn', + name: '鏌ョ湅', + }, + emits: { + onClick: (row) => handlePreview(row), + }, + extraProps: { + hide: (row: FourStreamsMaterialFileTableItem) => { + if (!props.showCheckBtn) return true; + let fileList = row?.fileList?.filter?.((item) => item.status === 'success'); + if (!fileList?.length) { + return true; + } else { + if (fileList.length > 1) { + return false; + } else { + return !isFileCanPreview(fileList[0].path); + } + } + }, + }, + }, + { + data: { + enCode: 'downloadBtn', + name: '涓嬭浇', + }, + emits: { + onClick: (row) => handleBatchDownload(row), + }, + extraProps: { + hide: (row: FourStreamsMaterialFileTableItem) => { + return ( + !props.showDownloadBtn || + !row?.fileList?.filter?.((item) => item.status === 'success')?.length + ); + }, + }, + }, + { + data: { + enCode: 'delBtn', + name: '鍒犻櫎', + }, + props: { + type: 'danger', + }, + emits: { + onClick: (row) => handleDelete(row), + }, + extraProps: { + hide: (row: FourStreamsMaterialFileTableItem) => { + if (!props.showDeleteBtn) return true; + let fileList = row?.fileList?.filter?.((item) => item.status === 'success'); + return !fileList?.length; + }, + }, + }, +]); + +async function handleDelete(row: FourStreamsMaterialFileTableItem) { + try { + await Message.deleteMessage(); + row.fileList = []; + } catch (error) {} +} + +async function handlePreview(row: FourStreamsMaterialFileTableItem) { + if (row.fileList.length > 1) { + // currentEnterpriseMaterialFileTableItem.value = row; + // await nextTick(); + // dialogState.dialogVisible = true; + } else { + bolePreview({ + fileUrl: row.fileList[0].url, + }); + } +} + +function handleBatchDownload(row: FourStreamsMaterialFileTableItem) { + const successFileList = row.fileList.filter((item) => item.status === 'success'); + if (successFileList.length === 0) { + Message.errorMessage('娌℃湁鍙笅杞界殑鏂囦欢'); + return; + } + if (successFileList.length === 1) { + downloadFileByUrl(successFileList[0].url); + } else { + // downloadWithZip( + // successFileList.map((item) => ({ data: item.url })), + // `${AllEnterpriseMaterialFileBusinessTypeEnumText[row.fileBusinessType]}鏉愭枡鏂囦欢` + // ); + } +} +</script> + +<style lang="scss" scoped> +@use '@/style/common.scss' as *; +</style> diff --git a/src/components/commonView/MateriaDetailDialog.vue b/src/components/commonView/MateriaDetailDialog.vue new file mode 100644 index 0000000..1ab3ce2 --- /dev/null +++ b/src/components/commonView/MateriaDetailDialog.vue @@ -0,0 +1,46 @@ +<template> + <ProDialog title="鏉愭枡璇︽儏" v-model="visible" destroy-on-close draggable width="800px"> + <FourStreamsMaterialFileTable v-model:list="form.list" v-bind="props" /> + <template #footer> + <span class="dialog-footer"> + <el-button type="primary" @click="handleConfirm">纭� 瀹�</el-button> + </span> + </template> + </ProDialog> +</template> + +<script setup lang="ts"> +import { ProDialog } from '@bole-core/components'; +import FourStreamsMaterialFileTable from './FourStreamsMaterialFileTable.vue'; +import { FourStreamsMaterialFileTableProps, FourStreamsMaterialFileTableItem } from './types'; + +defineOptions({ + name: 'MateriaDetailDialog', +}); + +type Props = FourStreamsMaterialFileTableProps & {}; + +const props = withDefaults(defineProps<Props>(), { + showUploadBtn: true, + showCheckBtn: true, + showDownloadBtn: true, + showDeleteBtn: true, +}); + +const visible = defineModel({ type: Boolean }); + +type Form = { + list: FourStreamsMaterialFileTableItem[]; +}; + +const form = defineModel<Form>('form'); + +const emit = defineEmits<{ + (e: 'onConfirm'): void; + (e: 'onCancel'): void; +}>(); + +function handleConfirm() { + emit('onConfirm'); +} +</script> diff --git a/src/components/commonView/MaterialInfoView.vue b/src/components/commonView/MaterialInfoView.vue new file mode 100644 index 0000000..4c67bf9 --- /dev/null +++ b/src/components/commonView/MaterialInfoView.vue @@ -0,0 +1,42 @@ +<template> + <ProFormCol> + <ProFormColItem :span="12"> + <ProFormItemV2 label="浼佷笟缂寸◣鏄庣粏姹囨�昏〃:" prop="link"> + <ProFormUpload v-model:file-url="form.url"></ProFormUpload> + </ProFormItemV2> + </ProFormColItem> + </ProFormCol> + <ProFormCol> + <ProFormColItem :span="12"> + <ProFormItemV2 label="浼佷笟钀ユ敹姹囨�昏〃:" prop="link"> + <ProFormUpload v-model:file-url="form.url"></ProFormUpload> + </ProFormItemV2> + </ProFormColItem> + </ProFormCol> +</template> + +<script setup lang="ts"> +import { + ProFormCol, + ProFormColItem, + ProFormItemV2, + ProFormUpload, + UploadUserFile, +} from '@bole-core/components'; + +defineOptions({ + name: 'MaterialInfoView', +}); + +type Props = { + form: { + url: UploadUserFile[]; + }; +}; + +const props = withDefaults(defineProps<Props>(), {}); +</script> + +<style lang="scss" scoped> +@use '@/style/common.scss' as *; +</style> diff --git a/src/components/commonView/SettlementMaterialInfoView.vue b/src/components/commonView/SettlementMaterialInfoView.vue new file mode 100644 index 0000000..5bbb622 --- /dev/null +++ b/src/components/commonView/SettlementMaterialInfoView.vue @@ -0,0 +1,51 @@ +<template> + <ProFormCol> + <ProFormColItem :span="12"> + <ProFormItemV2 label="鏈鐢虫姤濂栧姳閲戞�婚:" prop="link"> + <ProFormInputNumber v-model="form.amount" unit="鍏�" /> + </ProFormItemV2> + </ProFormColItem> + </ProFormCol> + <ProFormCol> + <ProFormColItem :span="12"> + <ProFormItemV2 label="濂栧姳閲戝垎閰嶆槑缁嗚〃:" prop="link"> + <ProFormUpload v-model:file-url="form.url"></ProFormUpload> + </ProFormItemV2> + </ProFormColItem> + </ProFormCol> + <ProFormCol> + <ProFormColItem :span="12"> + <ProFormItemV2 label="濂栧姳閲戞眹鎬昏〃:" prop="link"> + <ProFormUpload v-model:file-url="form.url"></ProFormUpload> + </ProFormItemV2> + </ProFormColItem> + </ProFormCol> +</template> + +<script setup lang="ts"> +import { + ProFormCol, + ProFormColItem, + ProFormItemV2, + ProFormUpload, + UploadUserFile, + ProFormInputNumber, +} from '@bole-core/components'; + +defineOptions({ + name: 'SettlementMaterialInfoView', +}); + +type Props = { + form: { + amount: number; + url: UploadUserFile[]; + }; +}; + +const props = withDefaults(defineProps<Props>(), {}); +</script> + +<style lang="scss" scoped> +@use '@/style/common.scss' as *; +</style> diff --git a/src/components/commonView/types.ts b/src/components/commonView/types.ts new file mode 100644 index 0000000..73dff5f --- /dev/null +++ b/src/components/commonView/types.ts @@ -0,0 +1,14 @@ +import { EnterpriseMaterialFileBusinessTypeEnum } from '@/constants'; +import { UploadUserFile } from '@bole-core/components'; + +export type FourStreamsMaterialFileTableProps = { + showUploadBtn?: boolean; + showCheckBtn?: boolean; + showDownloadBtn?: boolean; + showDeleteBtn?: boolean; +}; + +export type FourStreamsMaterialFileTableItem = { + fileBusinessType: EnterpriseMaterialFileBusinessTypeEnum; + fileList: (API.AddEnterpriseMaterialFileInput & UploadUserFile)[]; +}; diff --git a/src/constants/dic.ts b/src/constants/dic.ts new file mode 100644 index 0000000..2bd2ed0 --- /dev/null +++ b/src/constants/dic.ts @@ -0,0 +1,43 @@ +export enum SearchType { + Hot = 10, + Service = 20, + Work = 30, + Park = 40, + Info = 50, + Policy = 60, + RegionalManagement = 70, + ProductType = 80, + DemandType = 90, + DemandRange = 100, + EmployeeBenefits = 110, + CompanyIndustry = 120, + HeadHunterPosition = 130, + ConsultationCategory = 140, + FAQCategory = 150, + IndustryCategory = 160, + FirstPartyIndustry = 170, + MatingServiceType = 180, + IndustryBodyType = 190, +} + +export const SearchTypeText = { + [SearchType.Hot]: '鐑悳璇�', + [SearchType.Service]: '鏈嶅姟绫诲瀷', + [SearchType.Work]: '宸ョ', + [SearchType.Park]: '鍥尯绫诲瀷', + [SearchType.Info]: '璧勮娲诲姩绫诲瀷', + [SearchType.Policy]: '鏀跨瓥棰佸竷鏈烘瀯', + [SearchType.RegionalManagement]: '鍖哄煙绠$悊', + [SearchType.ProductType]: '浜у搧绫诲瀷', + [SearchType.DemandType]: '闇�姹傜被鍨�', + [SearchType.DemandRange]: '闇�姹傝寖鍥�', + [SearchType.EmployeeBenefits]: '鍛樺伐绂忓埄', + [SearchType.CompanyIndustry]: '鍏徃琛屼笟', + [SearchType.HeadHunterPosition]: '鐚庡ご鑱屼綅', + [SearchType.ConsultationCategory]: '鍜ㄨ绫诲埆', + [SearchType.FAQCategory]: '闂鍒嗙被', + [SearchType.IndustryCategory]: '琛屼笟绫诲埆', + [SearchType.FirstPartyIndustry]: '鐢叉柟琛屼笟', + [SearchType.MatingServiceType]: '閰嶅鏈嶅姟绫诲瀷', + [SearchType.IndustryBodyType]: '琛屼笟鏈烘瀯绫诲瀷', +}; diff --git a/src/constants/enterpriseMaterial.ts b/src/constants/enterpriseMaterial.ts new file mode 100644 index 0000000..88f2eb5 --- /dev/null +++ b/src/constants/enterpriseMaterial.ts @@ -0,0 +1,111 @@ +export enum EnterpriseMaterialTypeEnum { + /** + * 鍥涙祦鍚堜竴 + */ + FourStreams = 10, + /** + * 瀹岀◣鏉愭枡 + */ + Dutiable = 11, + /** + * 鍏跺畠鏉愭枡 + */ + Other = 20, +} + +export const EnterpriseMaterialTypeEnumText = { + [EnterpriseMaterialTypeEnum.FourStreams]: '鍥涙祦鍚堜竴', + [EnterpriseMaterialTypeEnum.Dutiable]: '瀹岀◣鏉愭枡', + [EnterpriseMaterialTypeEnum.Other]: '鍏跺畠鏉愭枡', +}; + +/** + * 0-199涓哄洓娴佹潗鏂� 200-300涓哄畬绋庢潗鏂� + */ +export enum EnterpriseMaterialFileBusinessTypeEnum { + /** + * 宸ヨ祫琛� + */ + PayRoll = 10, + /** + * 閾惰娴佹按 + */ + BankFlow = 20, + /** + * 浜哄憳淇℃伅琛� + */ + Information = 30, + /** + * 宸ヨ祫钖噾鎵�寰� + */ + Salary = 40, + /** + * 浠e彂鏄庣粏 + */ + DistributionDetails = 50, + /** + * 鍙戠エ + */ + Invoice = 60, + /** + * 鍔冲姩鍚堝悓 + */ + LaborContract = 70, + /** + * 涓氬姟鍚堝悓 + */ + BussinessContract = 80, + /** + * 鍔冲姩鍚堝悓姹囨�昏〃 + */ + LaborContractSummary = 90, + /** + * 绂昏亴璇佹槑 + */ + LeavingCertificate = 100, + /** + * 寮�绁ㄦ槑缁嗚〃 + */ + InvoicingSchedule = 110, + /** + * 鎵�寰楃◣璇佹槑 + */ + IncomeTaxCertificate = 200, + /** + * 澧炲�煎強闄勫姞绋庤瘉鏄� + */ + AdditionalTaxCertificate = 210, + /** + * 寮�绁ㄦ槑缁嗘枃浠� + */ + BillingDetails = 220, + /** + * 鍏朵粬鏉愭枡 + */ + Other = 999, +} + +export const EnterpriseMaterialFileBusinessTypeEnumText = { + [EnterpriseMaterialFileBusinessTypeEnum.PayRoll]: '宸ヨ祫琛�', + [EnterpriseMaterialFileBusinessTypeEnum.BankFlow]: '閾惰娴佹按', + [EnterpriseMaterialFileBusinessTypeEnum.Information]: '浜哄憳淇℃伅琛�', + [EnterpriseMaterialFileBusinessTypeEnum.Salary]: '宸ヨ祫钖噾鎵�寰�', + [EnterpriseMaterialFileBusinessTypeEnum.DistributionDetails]: '浠e彂鏄庣粏', + [EnterpriseMaterialFileBusinessTypeEnum.Invoice]: '鍙戠エ', + [EnterpriseMaterialFileBusinessTypeEnum.LaborContract]: '鍔冲姩鍚堝悓', + [EnterpriseMaterialFileBusinessTypeEnum.BussinessContract]: '涓氬姟鍚堝悓', + [EnterpriseMaterialFileBusinessTypeEnum.LaborContractSummary]: '鍔冲姩鍚堝悓姹囨�昏〃', + [EnterpriseMaterialFileBusinessTypeEnum.LeavingCertificate]: '绂昏亴璇佹槑', + [EnterpriseMaterialFileBusinessTypeEnum.InvoicingSchedule]: '寮�绁ㄦ槑缁嗚〃', +}; + +export const DutiableFileBusinessTypeEnumText = { + [EnterpriseMaterialFileBusinessTypeEnum.IncomeTaxCertificate]: '鎵�寰楃◣璇佹槑', + [EnterpriseMaterialFileBusinessTypeEnum.AdditionalTaxCertificate]: '澧炲�煎強闄勫姞绋庤瘉鏄�', + [EnterpriseMaterialFileBusinessTypeEnum.BillingDetails]: '寮�绁ㄦ槑缁嗘枃浠�', +}; + +export const AllEnterpriseMaterialFileBusinessTypeEnumText = { + ...EnterpriseMaterialFileBusinessTypeEnumText, + ...DutiableFileBusinessTypeEnumText, +}; diff --git a/src/constants/index.ts b/src/constants/index.ts index fa61beb..d5c8f0b 100644 --- a/src/constants/index.ts +++ b/src/constants/index.ts @@ -9,3 +9,5 @@ export * from './menu'; export * from './role'; export * from './app'; +export * from './dic'; +export * from './enterpriseMaterial'; diff --git a/src/hooks/dic.ts b/src/hooks/dic.ts new file mode 100644 index 0000000..3051991 --- /dev/null +++ b/src/hooks/dic.ts @@ -0,0 +1,131 @@ +import * as searchSettingServices from '@/services/api/SearchSetting'; +import { useQuery } from '@tanstack/vue-query'; +import { useQueryClient } from '@tanstack/vue-query'; +import { SearchType } from '@/constants'; + +type UseSearchSettingTypeOptions = { + searchType: number; + belongType?: number; + /** + * @deprecated + */ + isSelf?: boolean; + onSuccess?: (data: API.GetTypeSearchSettingList[]) => any; +}; + +export function useSearchSettingType({ + searchType, + belongType = null, + onSuccess, + isSelf, +}: UseSearchSettingTypeOptions) { + const { data, refetch } = useQuery({ + queryKey: [ + 'searchSettingServices/getTypeSearchSettingList', + { searchType, belongType, isSelf }, + ], + queryFn: async () => { + return await searchSettingServices.getTypeSearchSettingList( + { + searchType: searchType, + belongType: belongType, + }, + { showLoading: false } + ); + }, + placeholderData: () => [] as API.GetTypeSearchSettingList[], + onSuccess(data) { + onSuccess?.(data); + }, + }); + + const queryClient = useQueryClient(); + + async function ensureSearchSettingType() { + return await queryClient.ensureQueryData({ + queryKey: [ + 'searchSettingServices/getTypeSearchSettingList', + { searchType: searchType, belongType: belongType }, + ], + }); + } + + function getSearchSettingTypeNameById(id: string) { + return data.value.find((x) => x.id === id)?.name ?? ''; + } + + return { + searchSettingTypeList: data, + ensureSearchSettingType, + refetchSearchSettingType: refetch, + getSearchSettingTypeNameById, + }; +} + +type UseAllSearchSettingList = API.GetSearchSettingListInput & { + enabled?: boolean | Ref<boolean>; +}; + +export function useAllSearchSettingList(options: UseAllSearchSettingList) { + const { enabled = true, ...params } = options; + + const { data: allSearchSettingList } = useQuery({ + queryKey: ['searchSettingServices/getSearchSettingDto', params], + queryFn: async () => { + return await searchSettingServices.getAllSearchSettingList(params, { showLoading: false }); + }, + initialData: () => [] as API.GetSearchSettingList[], + enabled, + }); + + return { + allSearchSettingList, + }; +} + +type UseWorkOfTypeOptions = { + enabled?: boolean | Ref<boolean>; +}; + +export function useWorkOfType(options: UseWorkOfTypeOptions = {}) { + const { enabled = true } = options; + + const { allSearchSettingList: industryCategoryList } = useAllSearchSettingList({ + searchType: SearchType.IndustryCategory, + enabled, + status: true, + }); + + const { allSearchSettingList: flattenWorkOfTypeList } = useAllSearchSettingList({ + searchType: SearchType.Work, + enabled, + status: true, + }); + + const workOfTypeList = computed<API.GetSearchSettingList[]>(() => { + if (industryCategoryList.value?.length > 0) { + let list = []; + industryCategoryList.value.forEach((x) => { + list.push({ + ...x, + children: flattenWorkOfTypeList.value.filter((w) => w.parentId === x.id), + }); + }); + return list; + } + return []; + }); + + function getWorkOfTypeNameById(id: string) { + return flattenWorkOfTypeList.value.find((x) => x.id === id)?.name ?? ''; + } + + const MaxSelectWorkOfTypeLimit = 6; + + return { + workOfTypeList: workOfTypeList, + flattenWorkOfTypeList, + getWorkOfTypeNameById, + MaxSelectWorkOfTypeLimit, + }; +} diff --git a/src/hooks/index.ts b/src/hooks/index.ts index cbe1cbd..bc2b519 100644 --- a/src/hooks/index.ts +++ b/src/hooks/index.ts @@ -6,3 +6,4 @@ export * from './useEvent'; export * from './useUser'; export * from './help'; +export * from './dic'; diff --git a/src/views/MaterialReview/MaterialReviewAudit.vue b/src/views/MaterialReview/MaterialReviewAudit.vue index 5812f49..5039c84 100644 --- a/src/views/MaterialReview/MaterialReviewAudit.vue +++ b/src/views/MaterialReview/MaterialReviewAudit.vue @@ -1,11 +1,130 @@ <template> - <div>MaterialReviewAudit</div> + <LoadingLayout> + <AppContainer> + <PageFormLayout title="鏉愭枡瀹℃牳"> + <DetailView :form="state.detail" :has-form="true"> + <template #table> + <DeclareEnterpriseTableView ref="tableRef"></DeclareEnterpriseTableView> + </template> + <template #form> + <ProForm :model="state.form" ref="formRef" label-width="120px"> + <ProFormCol> + <ProFormColItem :span="12"> + <ProFormItemV2 + label="鐢虫姤瀹℃牳:" + prop="status" + :check-rules="[{ message: '璇烽�夋嫨瀹℃牳鐘舵��' }]" + > + <ProFormRadio v-model="state.form.status" :value-enum="DataRangeEnumText" /> + </ProFormItemV2> + </ProFormColItem> + </ProFormCol> + <ProFormCol> + <ProFormColItem> + <ProFormItemV2 label="椹冲洖鍘熷洜:" prop="remark"> + <ProFormTextArea + v-model="state.form.remark" + placeholder="璇疯緭鍏�" + show-word-limit + :maxlength="200" + ></ProFormTextArea> + </ProFormItemV2> + </ProFormColItem> + </ProFormCol> + </ProForm> + </template> + </DetailView> + <template #footer> + <el-button @click="handleBack">鍏抽棴</el-button> + <el-button type="primary" @click="handleConfirm()">鎻愪氦</el-button> + </template> + </PageFormLayout> + </AppContainer> + </LoadingLayout> </template> <script setup lang="ts"> +import { + AppContainer, + ProForm, + ProFormCol, + ProFormColItem, + ProFormItemV2, + ProFormTextArea, + ProFormRadio, + LoadingLayout, + UploadUserFile, + PageFormLayout, +} from '@bole-core/components'; +import { DataRangeEnum, DataRangeEnumText } from '@/constants'; +import DetailView from '@/components/commonView/DetailView.vue'; +import DeclareEnterpriseTableView from '@/components/commonView/DeclareEnterpriseTableView.vue'; +import { useQuery } from '@tanstack/vue-query'; +import * as informationServices from '@/services/api/Information'; +import { convertApi2FormUrlOnlyOne } from '@/utils'; +import { useRouteView } from '@/hooks'; +import { FormInstance } from 'element-plus'; + defineOptions({ name: 'MaterialReviewAudit', }); + +const route = useRoute(); +const { closeViewPush } = useRouteView(); +const id = route.params?.id as string; +const state = reactive({ + detail: { + categoryName: '', + amount: 0, + url: [] as UploadUserFile[], + }, + form: { + status: '' as any as DataRangeEnum, + remark: '', + }, +}); + +const tableRef = ref<InstanceType<typeof DeclareEnterpriseTableView>>(); + +const { data: detail, isLoading } = useQuery({ + queryKey: ['informationServices/getInformationShowDetail', id], + queryFn: async () => { + return await informationServices.getInformationShowDetail( + { id: id }, + { + showLoading: false, + } + ); + }, + placeholderData: () => ({} as API.InformationShowDetailDto), + onSuccess(data) { + state.detail.categoryName = data.categoryName; + state.detail.amount = data.attentionCount; + state.detail.url = convertApi2FormUrlOnlyOne(data.avatarUrl); + + tableRef.value?.getList(); + }, +}); + +function handleBack() { + closeViewPush(route, { + name: 'MaterialReviewList', + }); +} + +const formRef = ref<FormInstance>(); +function handleConfirm() { + if (!formRef.value) return; + formRef.value.validate((valid) => { + if (valid) { + confirm(); + } else { + return; + } + }); +} + +function confirm() {} </script> <style lang="scss" scoped> diff --git a/src/views/MaterialReview/MaterialReviewDetail.vue b/src/views/MaterialReview/MaterialReviewDetail.vue index 62c93d0..7eee540 100644 --- a/src/views/MaterialReview/MaterialReviewDetail.vue +++ b/src/views/MaterialReview/MaterialReviewDetail.vue @@ -1,13 +1,99 @@ <template> - <div>MaterialReviewDetail</div> + <LoadingLayout> + <AppContainer> + <PageFormLayout> + <template #title> + <div class="page-form-layout-title"> + <div> + 鐢虫姤璇︽儏 + <span class="page-form-layout-title-item status"> + {{ `瀹℃牳鐘舵��:${state.detail.categoryName}` }} + </span> + <span class="page-form-layout-title-item remark"> + {{ `瀹℃牳鏈�氳繃鍘熷洜:${state.detail.categoryName}` }} + </span> + </div> + </div> + </template> + <DetailView :form="state.detail"> + <template #table> + <DeclareEnterpriseTableView ref="tableRef"></DeclareEnterpriseTableView> + </template> + </DetailView> + <template #footer> + <el-button @click="handleBack">鍏抽棴</el-button> + </template> + </PageFormLayout> + </AppContainer> + </LoadingLayout> </template> <script setup lang="ts"> +import { AppContainer, LoadingLayout, UploadUserFile, PageFormLayout } from '@bole-core/components'; +import { DataRangeEnum } from '@/constants'; +import DetailView from '@/components/commonView/DetailView.vue'; +import DeclareEnterpriseTableView from '@/components/commonView/DeclareEnterpriseTableView.vue'; +import { useQuery } from '@tanstack/vue-query'; +import * as informationServices from '@/services/api/Information'; +import { convertApi2FormUrlOnlyOne } from '@/utils'; +import { useRouteView } from '@/hooks'; + defineOptions({ name: 'MaterialReviewDetail', }); + +const route = useRoute(); +const { closeViewPush } = useRouteView(); +const id = route.params?.id as string; +const state = reactive({ + detail: { + categoryName: '', + amount: 0, + url: [] as UploadUserFile[], + }, +}); + +const tableRef = ref<InstanceType<typeof DeclareEnterpriseTableView>>(); + +const { data: detail, isLoading } = useQuery({ + queryKey: ['informationServices/getInformationShowDetail', id], + queryFn: async () => { + return await informationServices.getInformationShowDetail( + { id: id }, + { + showLoading: false, + } + ); + }, + placeholderData: () => ({} as API.InformationShowDetailDto), + onSuccess(data) { + state.detail.categoryName = data.categoryName; + state.detail.amount = data.attentionCount; + state.detail.url = convertApi2FormUrlOnlyOne(data.avatarUrl); + + tableRef.value?.getList(); + }, +}); + +function handleBack() { + closeViewPush(route, { + name: 'MaterialReviewList', + }); +} </script> <style lang="scss" scoped> @use '@/style/common.scss' as *; + +.page-form-layout-title-item { + margin-left: 16px; + font-size: 16px; + + &.remark { + flex: 1; + min-width: 0; + + @include utils-ellipsis; + } +} </style> diff --git a/src/views/Reward/RewardDeclareDetail.vue b/src/views/Reward/RewardDeclareDetail.vue index 6510a7c..e3c47c4 100644 --- a/src/views/Reward/RewardDeclareDetail.vue +++ b/src/views/Reward/RewardDeclareDetail.vue @@ -1,11 +1,71 @@ <template> - <div>RewardDeclareDetail</div> + <LoadingLayout> + <AppContainer> + <PageFormLayout title="鐢虫姤璇︽儏"> + <DetailView :form="state.detail"> + <template #table> + <DeclareEnterpriseTableView ref="tableRef"></DeclareEnterpriseTableView> + </template> + </DetailView> + <template #footer> + <el-button @click="handleBack">鍏抽棴</el-button> + </template> + </PageFormLayout> + </AppContainer> + </LoadingLayout> </template> <script setup lang="ts"> +import { AppContainer, LoadingLayout, UploadUserFile, PageFormLayout } from '@bole-core/components'; +import DetailView from '@/components/commonView/DetailView.vue'; +import DeclareEnterpriseTableView from '@/components/commonView/DeclareEnterpriseTableView.vue'; +import { useQuery } from '@tanstack/vue-query'; +import * as informationServices from '@/services/api/Information'; +import { convertApi2FormUrlOnlyOne } from '@/utils'; +import { useRouteView } from '@/hooks'; + defineOptions({ name: 'RewardDeclareDetail', }); + +const route = useRoute(); +const { closeViewPush } = useRouteView(); +const id = route.params?.id as string; +const state = reactive({ + detail: { + categoryName: '', + amount: 0, + url: [] as UploadUserFile[], + }, +}); + +const tableRef = ref<InstanceType<typeof DeclareEnterpriseTableView>>(); + +const { data: detail, isLoading } = useQuery({ + queryKey: ['informationServices/getInformationShowDetail', id], + queryFn: async () => { + return await informationServices.getInformationShowDetail( + { id: id }, + { + showLoading: false, + } + ); + }, + placeholderData: () => ({} as API.InformationShowDetailDto), + onSuccess(data) { + state.detail.categoryName = data.categoryName; + state.detail.amount = data.attentionCount; + state.detail.url = convertApi2FormUrlOnlyOne(data.avatarUrl); + + tableRef.value?.getList(); + }, +}); + +function handleBack() { + closeViewPush(route, { + name: 'RewardGrant', + }); +} </script> <style lang="scss" scoped> -- Gitblit v1.9.1