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