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", 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 src/components/Layout/ChunkCellV2.vue
New file @@ -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> src/components/commonView/BatchInfoView.vue
New file @@ -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> src/components/commonView/DeclareEnterpriseTableView.vue
New file @@ -0,0 +1,145 @@ <template> <ProTableQueryFilterBar @on-reset="reset"> <template #query> <QueryFilterItem> <SearchInput v-model="extraParamState.title" style="width: 250px" placeholder="企业名/信用代码" @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> src/components/commonView/DetailView.vue
New file @@ -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> src/components/commonView/FourStreamsMaterialFileTable.vue
New file @@ -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> src/components/commonView/MateriaDetailDialog.vue
New file @@ -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> src/components/commonView/MaterialInfoView.vue
New file @@ -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> src/components/commonView/SettlementMaterialInfoView.vue
New file @@ -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> src/components/commonView/types.ts
New file @@ -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)[]; }; src/constants/dic.ts
New file @@ -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]: '行业机构类型', }; src/constants/enterpriseMaterial.ts
New file @@ -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, /** * 代发明细 */ 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]: '代发明细', [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, }; src/constants/index.ts
@@ -9,3 +9,5 @@ export * from './menu'; export * from './role'; export * from './app'; export * from './dic'; export * from './enterpriseMaterial'; src/hooks/dic.ts
New file @@ -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, }; } src/hooks/index.ts
@@ -6,3 +6,4 @@ export * from './useEvent'; export * from './useUser'; export * from './help'; export * from './dic'; 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> 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> 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>