Merge branch 'master' into feature/20261027-hcs-bif-all-web

# Conflicts:
#	src/views/business/contract-manage.vue
This commit is contained in:
刘泉佳
2026-10-31 14:12:05 +08:00
19 changed files with 710 additions and 404 deletions
+2 -2
View File
@@ -8,7 +8,7 @@
"build:prod": "vite build --mode production && node scripts/zip-dist.mjs", "build:prod": "vite build --mode production && node scripts/zip-dist.mjs",
"zip:dist": "node scripts/zip-dist.mjs", "zip:dist": "node scripts/zip-dist.mjs",
"serve": "vite preview --host", "serve": "vite preview --host",
"typecheck": "vue-tsc --noEmit" "typecheck": "vue-tsc -p jsconfig.json --noEmit"
}, },
"dependencies": { "dependencies": {
"@element-plus/icons-vue": "^2.3.1", "@element-plus/icons-vue": "^2.3.1",
@@ -49,7 +49,7 @@
"prettier": "^2.8.7", "prettier": "^2.8.7",
"sass": "^1.85.1", "sass": "^1.85.1",
"terser": "^5.31.1", "terser": "^5.31.1",
"typescript": "^7.0.2", "typescript": "5.9.3",
"unplugin-auto-import": "^0.11.2", "unplugin-auto-import": "^0.11.2",
"vite": "^5.4.19", "vite": "^5.4.19",
"vite-plugin-compression": "^0.5.1", "vite-plugin-compression": "^0.5.1",
+94 -295
View File
@@ -13,31 +13,31 @@ importers:
dependencies: dependencies:
'@element-plus/icons-vue': '@element-plus/icons-vue':
specifier: ^2.3.1 specifier: ^2.3.1
version: 2.3.2(vue@3.5.34(typescript@7.0.2)) version: 2.3.2(vue@3.5.34(typescript@5.9.3))
'@open-file-viewer/core': '@open-file-viewer/core':
specifier: ^0.1.27 specifier: ^0.1.27
version: 0.1.27(pdfjs-dist@6.1.200) version: 0.1.27(pdfjs-dist@6.1.200)
'@open-file-viewer/vue': '@open-file-viewer/vue':
specifier: ^0.1.27 specifier: ^0.1.27
version: 0.1.27(@open-file-viewer/core@0.1.27(pdfjs-dist@6.1.200))(vue@3.5.34(typescript@7.0.2)) version: 0.1.27(@open-file-viewer/core@0.1.27(pdfjs-dist@6.1.200))(vue@3.5.34(typescript@5.9.3))
'@saber/nf-design-base-elp': '@saber/nf-design-base-elp':
specifier: ^1.3.0 specifier: ^1.3.0
version: 1.3.0 version: 1.3.0
'@saber/nf-form-design-elp': '@saber/nf-form-design-elp':
specifier: ^1.6.1 specifier: ^1.6.1
version: 1.6.1(vue@3.5.34(typescript@7.0.2)) version: 1.6.1(vue@3.5.34(typescript@5.9.3))
'@saber/nf-form-elp': '@saber/nf-form-elp':
specifier: ^1.6.3 specifier: ^1.6.3
version: 1.7.0 version: 1.7.0
'@smallwei/avue': '@smallwei/avue':
specifier: ~3.9.2 specifier: ~3.9.2
version: 3.9.2(patch_hash=5ba15ad41b2c301250bf24adf39da2ed526b8375143da2c5a495361b29e862db)(@element-plus/icons-vue@2.3.2(vue@3.5.34(typescript@7.0.2)))(debug@4.4.3(supports-color@7.2.0))(element-plus@2.14.2(vue@3.5.34(typescript@7.0.2)))(vue@3.5.34(typescript@7.0.2)) version: 3.9.2(patch_hash=5ba15ad41b2c301250bf24adf39da2ed526b8375143da2c5a495361b29e862db)(@element-plus/icons-vue@2.3.2(vue@3.5.34(typescript@5.9.3)))(debug@4.4.3(supports-color@7.2.0))(element-plus@2.14.2(vue@3.5.34(typescript@5.9.3)))(vue@3.5.34(typescript@5.9.3))
animate.css: animate.css:
specifier: ^4.1.1 specifier: ^4.1.1
version: 4.1.1 version: 4.1.1
avue-plugin-ueditor: avue-plugin-ueditor:
specifier: ^1.0.4 specifier: ^1.0.4
version: 1.0.4(axios@1.16.0(debug@4.4.3(supports-color@7.2.0)))(vue@3.5.34(typescript@7.0.2)) version: 1.0.4(axios@1.16.0(debug@4.4.3(supports-color@7.2.0)))(vue@3.5.34(typescript@5.9.3))
axios: axios:
specifier: ^1.13.5 specifier: ^1.13.5
version: 1.16.0(debug@4.4.3(supports-color@7.2.0)) version: 1.16.0(debug@4.4.3(supports-color@7.2.0))
@@ -58,7 +58,7 @@ importers:
version: 6.1.0 version: 6.1.0
element-plus: element-plus:
specifier: ^2.14.2 specifier: ^2.14.2
version: 2.14.2(vue@3.5.34(typescript@7.0.2)) version: 2.14.2(vue@3.5.34(typescript@5.9.3))
exceljs: exceljs:
specifier: ^4.4.0 specifier: ^4.4.0
version: 4.4.0 version: 4.4.0
@@ -85,29 +85,29 @@ importers:
version: 0.4.0 version: 0.4.0
vue: vue:
specifier: ^3.5.13 specifier: ^3.5.13
version: 3.5.34(typescript@7.0.2) version: 3.5.34(typescript@5.9.3)
vue-i18n: vue-i18n:
specifier: ^11.4.2 specifier: ^11.4.2
version: 11.4.2(vue@3.5.34(typescript@7.0.2)) version: 11.4.2(vue@3.5.34(typescript@5.9.3))
vue-pdf-embed: vue-pdf-embed:
specifier: ^2.1.6 specifier: ^2.1.6
version: 2.1.6(vue@3.5.34(typescript@7.0.2)) version: 2.1.6(vue@3.5.34(typescript@5.9.3))
vue-router: vue-router:
specifier: ^4.3.2 specifier: ^4.3.2
version: 4.6.4(vue@3.5.34(typescript@7.0.2)) version: 4.6.4(vue@3.5.34(typescript@5.9.3))
vue3-clipboard: vue3-clipboard:
specifier: ^1.0.0 specifier: ^1.0.0
version: 1.0.0(vue@3.5.34(typescript@7.0.2)) version: 1.0.0(vue@3.5.34(typescript@5.9.3))
vuex: vuex:
specifier: ^4.1.0 specifier: ^4.1.0
version: 4.1.0(vue@3.5.34(typescript@7.0.2)) version: 4.1.0(vue@3.5.34(typescript@5.9.3))
xlsx: xlsx:
specifier: 0.18.5 specifier: 0.18.5
version: 0.18.5 version: 0.18.5
devDependencies: devDependencies:
'@vitejs/plugin-vue': '@vitejs/plugin-vue':
specifier: ^5.2.4 specifier: ^5.2.4
version: 5.2.4(vite@5.4.21(sass@1.99.0)(terser@5.46.2))(vue@3.5.34(typescript@7.0.2)) version: 5.2.4(vite@5.4.21(sass@1.99.0)(terser@5.46.2))(vue@3.5.34(typescript@5.9.3))
'@vue/compiler-sfc': '@vue/compiler-sfc':
specifier: ^3.4.27 specifier: ^3.4.27
version: 3.5.34 version: 3.5.34
@@ -121,11 +121,11 @@ importers:
specifier: ^5.31.1 specifier: ^5.31.1
version: 5.46.2 version: 5.46.2
typescript: typescript:
specifier: ^7.0.2 specifier: 5.9.3
version: 7.0.2 version: 5.9.3
unplugin-auto-import: unplugin-auto-import:
specifier: ^0.11.2 specifier: ^0.11.2
version: 0.11.5(@vueuse/core@14.3.0(vue@3.5.34(typescript@7.0.2)))(rollup@4.60.3) version: 0.11.5(@vueuse/core@14.3.0(vue@3.5.34(typescript@5.9.3)))(rollup@4.60.3)
vite: vite:
specifier: ^5.4.19 specifier: ^5.4.19
version: 5.4.21(sass@1.99.0)(terser@5.46.2) version: 5.4.21(sass@1.99.0)(terser@5.46.2)
@@ -137,7 +137,7 @@ importers:
version: 0.4.0(vite@5.4.21(sass@1.99.0)(terser@5.46.2)) version: 0.4.0(vite@5.4.21(sass@1.99.0)(terser@5.46.2))
vue-tsc: vue-tsc:
specifier: ^3.3.11 specifier: ^3.3.11
version: 3.3.13(typescript@7.0.2) version: 3.3.13(typescript@5.9.3)
packages: packages:
@@ -771,126 +771,6 @@ packages:
'@types/web-bluetooth@0.0.21': '@types/web-bluetooth@0.0.21':
resolution: {integrity: sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==} resolution: {integrity: sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==}
'@typescript/typescript-aix-ppc64@7.0.2':
resolution: {integrity: sha512-MTKKkWB7p/0E9xi1d1tHtZ5PiLkGEMIq88pK2CubZjOsLtYTLqhgIgi6zepFa+9GHZ6h05NMCkQxGKiPXMxXtQ==}
engines: {node: '>=16.20.0'}
cpu: [ppc64]
os: [aix]
'@typescript/typescript-darwin-arm64@7.0.2':
resolution: {integrity: sha512-gowzar9MwS/aRWp6f3a4KUqzRjAZjOsmGNCM6LcTgXum+dBfgsBVMN+AgvOCCbguXyick6LJhpBszxMebJ8syA==}
engines: {node: '>=16.20.0'}
cpu: [arm64]
os: [darwin]
'@typescript/typescript-darwin-x64@7.0.2':
resolution: {integrity: sha512-SZ9xZInqApNlNGc9s0W1VSsktYSOe9cFqNOIqmN1Gs8SmkjKZYFt017G4VwPxASInODuAdbTW7sXiFUf893RgA==}
engines: {node: '>=16.20.0'}
cpu: [x64]
os: [darwin]
'@typescript/typescript-freebsd-arm64@7.0.2':
resolution: {integrity: sha512-W5NH4y/J0plIIS5b2xvTEkU7JFxyqdMAOgf+Ilhl0vHQXKO5dZoxd+C/jEtq56c4F3wk71RB4BMRQ2XdI+bwYQ==}
engines: {node: '>=16.20.0'}
cpu: [arm64]
os: [freebsd]
'@typescript/typescript-freebsd-x64@7.0.2':
resolution: {integrity: sha512-UMGDx5sTpzNw3WiPebH7l90IWfJggEd+egHt/q6p7/Cm3zqoV7VxkGXt+3DxPIw8CcmvAB0j3sVVfbhX+M4Tpw==}
engines: {node: '>=16.20.0'}
cpu: [x64]
os: [freebsd]
'@typescript/typescript-linux-arm64@7.0.2':
resolution: {integrity: sha512-Qh4eU4/y3yDjnfjjyPYihMj5/ODIlmt+Bzu17OI+fiSRDW57QmU5SiN63exPRNJPKUzcc1INa1NXdrJ+MqHjUQ==}
engines: {node: '>=16.20.0'}
cpu: [arm64]
os: [linux]
'@typescript/typescript-linux-arm@7.0.2':
resolution: {integrity: sha512-gffT3xPz9sR7j/YJExkyPntrI0P2EP9XbOyWzth2/Gs0RstK+90RBcO0ncXoXy/beYll1SXw846Nf2zdnEz0QQ==}
engines: {node: '>=16.20.0'}
cpu: [arm]
os: [linux]
'@typescript/typescript-linux-loong64@7.0.2':
resolution: {integrity: sha512-uEHck9i8hoAzXPiYRib1O7miOnz23SxIeVl6F4LXox+qov1K35jHcEW6VHKvZI+pyvl7fZEP4MCU5LYvIq1GuQ==}
engines: {node: '>=16.20.0'}
cpu: [loong64]
os: [linux]
'@typescript/typescript-linux-mips64el@7.0.2':
resolution: {integrity: sha512-R4KvAMnE43W5Qeqb0Ly56O3mWMWIAgsMyz36DCaycd5nbg/9kzm0liw3JocfRqyJY0KPmzFjbswozXyW0DnIYA==}
engines: {node: '>=16.20.0'}
cpu: [mips64el]
os: [linux]
'@typescript/typescript-linux-ppc64@7.0.2':
resolution: {integrity: sha512-DORx5b3sd/4S7eayxm4FQv+A7CrkUIGRaHiwI8oiHTAI1fAPWhF4J0vAlkC8biAlHSVVwxMQ3tjZ2/DVbnQiiA==}
engines: {node: '>=16.20.0'}
cpu: [ppc64]
os: [linux]
'@typescript/typescript-linux-riscv64@7.0.2':
resolution: {integrity: sha512-wf0jqEDOjrPRnKwYRyyJDRo11KMbvMFrU+q4zqKyChODBzvlkbhNQfKvLxQCcwTpdDaXSHZTVuh0JoCrKCUMHQ==}
engines: {node: '>=16.20.0'}
cpu: [riscv64]
os: [linux]
'@typescript/typescript-linux-s390x@7.0.2':
resolution: {integrity: sha512-IkwJc3L7yhytWd/ewjyxNDfOmswCm9GWMJT/ue/dU4aZNbwZeYAetq42VyLmsmSjvoX7z74X6ZaYCtzAr0EuGw==}
engines: {node: '>=16.20.0'}
cpu: [s390x]
os: [linux]
'@typescript/typescript-linux-x64@7.0.2':
resolution: {integrity: sha512-EYdf2cNg7rgCWJnxCdJ+F3V39O8ihb37eHAu1LK8oAFizgTQbPOK7zHHXbPt8rX24COqODXeI3sIf0fCXG7H/A==}
engines: {node: '>=16.20.0'}
cpu: [x64]
os: [linux]
'@typescript/typescript-netbsd-arm64@7.0.2':
resolution: {integrity: sha512-+polYF4MF04aPpO5FTkHran9yUQDSXqy5GiSDKpsll5jy3l3+g9QLhpf39T+ePtefhXLOGrLl0QIjkQP6VnelA==}
engines: {node: '>=16.20.0'}
cpu: [arm64]
os: [netbsd]
'@typescript/typescript-netbsd-x64@7.0.2':
resolution: {integrity: sha512-8YIT0EHM/3dq10ZOVF/A7pc/YSMtbcecct4rWtexrnSCHOPcpC2KTLXfTCR6vDpnSiY12heNb1GiN/wu+T/FyA==}
engines: {node: '>=16.20.0'}
cpu: [x64]
os: [netbsd]
'@typescript/typescript-openbsd-arm64@7.0.2':
resolution: {integrity: sha512-APT8+ClYnuYm1u9+kgGXoMj2VzWzcymwh2gNSQVySHfkRDGOTVkoWLjCmOQSaO+PoqQ57B0flRp9SA+7GnnkzQ==}
engines: {node: '>=16.20.0'}
cpu: [arm64]
os: [openbsd]
'@typescript/typescript-openbsd-x64@7.0.2':
resolution: {integrity: sha512-yX7s+Q0Dln0Dt9tEzZsAjXXR/+ytBM7AlglaqyeMPxQszJ1JhlJdZ6jLA+IzldHtflX81em7lDao1xXu+aRRkg==}
engines: {node: '>=16.20.0'}
cpu: [x64]
os: [openbsd]
'@typescript/typescript-sunos-x64@7.0.2':
resolution: {integrity: sha512-dLJDGaLZ1D4HPQn62u1n8mBDkJREwMsAkCdkwd4Ieqw+x3TUyTsqY0YiBCtE6H6OzzgGk3iuZ3vFWRS+E8/d1g==}
engines: {node: '>=16.20.0'}
cpu: [x64]
os: [sunos]
'@typescript/typescript-win32-arm64@7.0.2':
resolution: {integrity: sha512-Gyl1Vy6OsWesLzmq+EP0Fb7b4Nid5232AvcA2SFcdYreldpNtYFFofPjnt62y9hQy7VTaZp65ICJjuAQRaVcIQ==}
engines: {node: '>=16.20.0'}
cpu: [arm64]
os: [win32]
'@typescript/typescript-win32-x64@7.0.2':
resolution: {integrity: sha512-0BQ3HkAHHlKLSp1qRvf3SUhGpGsDuhB/jgFw75guyqbxJqEaS0Cw/VFO8i2nHglJUzQCRtMMR/IBAKE3ETMC4g==}
engines: {node: '>=16.20.0'}
cpu: [x64]
os: [win32]
'@uppy/companion-client@2.2.2': '@uppy/companion-client@2.2.2':
resolution: {integrity: sha512-5mTp2iq97/mYSisMaBtFRry6PTgZA6SIL7LePteOV5x0/DxKfrZW3DEiQERJmYpHzy7k8johpm2gHnEKto56Og==} resolution: {integrity: sha512-5mTp2iq97/mYSisMaBtFRry6PTgZA6SIL7LePteOV5x0/DxKfrZW3DEiQERJmYpHzy7k8johpm2gHnEKto56Og==}
@@ -2194,9 +2074,9 @@ packages:
typedarray@0.0.6: typedarray@0.0.6:
resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==}
typescript@7.0.2: typescript@5.9.3:
resolution: {integrity: sha512-8FYau96o3NKOhbjKi/qNvG/W5jhzxkbdm5sj9AbZ/5T5sWqn3hJgLfGx27sRKZWTvyzCP8dLRBTf5tBTSRVUNA==} resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==}
engines: {node: '>=16.20.0'} engines: {node: '>=14.17'}
hasBin: true hasBin: true
ufo@1.6.4: ufo@1.6.4:
@@ -2408,9 +2288,9 @@ snapshots:
'@ctrl/tinycolor@4.2.0': {} '@ctrl/tinycolor@4.2.0': {}
'@element-plus/icons-vue@2.3.2(vue@3.5.34(typescript@7.0.2))': '@element-plus/icons-vue@2.3.2(vue@3.5.34(typescript@5.9.3))':
dependencies: dependencies:
vue: 3.5.34(typescript@7.0.2) vue: 3.5.34(typescript@5.9.3)
'@esbuild/aix-ppc64@0.21.5': '@esbuild/aix-ppc64@0.21.5':
optional: true optional: true
@@ -2651,10 +2531,10 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- geotiff - geotiff
'@open-file-viewer/vue@0.1.27(@open-file-viewer/core@0.1.27(pdfjs-dist@6.1.200))(vue@3.5.34(typescript@7.0.2))': '@open-file-viewer/vue@0.1.27(@open-file-viewer/core@0.1.27(pdfjs-dist@6.1.200))(vue@3.5.34(typescript@5.9.3))':
dependencies: dependencies:
'@open-file-viewer/core': 0.1.27(pdfjs-dist@6.1.200) '@open-file-viewer/core': 0.1.27(pdfjs-dist@6.1.200)
vue: 3.5.34(typescript@7.0.2) vue: 3.5.34(typescript@5.9.3)
'@parcel/watcher-android-arm64@2.5.6': '@parcel/watcher-android-arm64@2.5.6':
optional: true optional: true
@@ -2806,9 +2686,9 @@ snapshots:
codemirror: 5.65.21 codemirror: 5.65.21
randomcolor: 0.6.2 randomcolor: 0.6.2
'@saber/nf-form-design-elp@1.6.1(vue@3.5.34(typescript@7.0.2))': '@saber/nf-form-design-elp@1.6.1(vue@3.5.34(typescript@5.9.3))':
dependencies: dependencies:
vuedraggable: 4.1.0(vue@3.5.34(typescript@7.0.2)) vuedraggable: 4.1.0(vue@3.5.34(typescript@5.9.3))
transitivePeerDependencies: transitivePeerDependencies:
- vue - vue
@@ -2820,16 +2700,16 @@ snapshots:
countup.js: 2.10.0 countup.js: 2.10.0
signature_pad: 5.1.3 signature_pad: 5.1.3
'@smallwei/avue@3.9.2(patch_hash=5ba15ad41b2c301250bf24adf39da2ed526b8375143da2c5a495361b29e862db)(@element-plus/icons-vue@2.3.2(vue@3.5.34(typescript@7.0.2)))(debug@4.4.3(supports-color@7.2.0))(element-plus@2.14.2(vue@3.5.34(typescript@7.0.2)))(vue@3.5.34(typescript@7.0.2))': '@smallwei/avue@3.9.2(patch_hash=5ba15ad41b2c301250bf24adf39da2ed526b8375143da2c5a495361b29e862db)(@element-plus/icons-vue@2.3.2(vue@3.5.34(typescript@5.9.3)))(debug@4.4.3(supports-color@7.2.0))(element-plus@2.14.2(vue@3.5.34(typescript@5.9.3)))(vue@3.5.34(typescript@5.9.3))':
dependencies: dependencies:
'@element-plus/icons-vue': 2.3.2(vue@3.5.34(typescript@7.0.2)) '@element-plus/icons-vue': 2.3.2(vue@3.5.34(typescript@5.9.3))
axios: 0.21.4(debug@4.4.3(supports-color@7.2.0)) axios: 0.21.4(debug@4.4.3(supports-color@7.2.0))
countup.js: 1.9.3 countup.js: 1.9.3
dayjs: 1.11.20 dayjs: 1.11.20
element-plus: 2.14.2(vue@3.5.34(typescript@7.0.2)) element-plus: 2.14.2(vue@3.5.34(typescript@5.9.3))
lodash: 4.18.1 lodash: 4.18.1
lodash-es: 4.18.1 lodash-es: 4.18.1
vue: 3.5.34(typescript@7.0.2) vue: 3.5.34(typescript@5.9.3)
transitivePeerDependencies: transitivePeerDependencies:
- debug - debug
@@ -2856,66 +2736,6 @@ snapshots:
'@types/web-bluetooth@0.0.21': {} '@types/web-bluetooth@0.0.21': {}
'@typescript/typescript-aix-ppc64@7.0.2':
optional: true
'@typescript/typescript-darwin-arm64@7.0.2':
optional: true
'@typescript/typescript-darwin-x64@7.0.2':
optional: true
'@typescript/typescript-freebsd-arm64@7.0.2':
optional: true
'@typescript/typescript-freebsd-x64@7.0.2':
optional: true
'@typescript/typescript-linux-arm64@7.0.2':
optional: true
'@typescript/typescript-linux-arm@7.0.2':
optional: true
'@typescript/typescript-linux-loong64@7.0.2':
optional: true
'@typescript/typescript-linux-mips64el@7.0.2':
optional: true
'@typescript/typescript-linux-ppc64@7.0.2':
optional: true
'@typescript/typescript-linux-riscv64@7.0.2':
optional: true
'@typescript/typescript-linux-s390x@7.0.2':
optional: true
'@typescript/typescript-linux-x64@7.0.2':
optional: true
'@typescript/typescript-netbsd-arm64@7.0.2':
optional: true
'@typescript/typescript-netbsd-x64@7.0.2':
optional: true
'@typescript/typescript-openbsd-arm64@7.0.2':
optional: true
'@typescript/typescript-openbsd-x64@7.0.2':
optional: true
'@typescript/typescript-sunos-x64@7.0.2':
optional: true
'@typescript/typescript-win32-arm64@7.0.2':
optional: true
'@typescript/typescript-win32-x64@7.0.2':
optional: true
'@uppy/companion-client@2.2.2': '@uppy/companion-client@2.2.2':
dependencies: dependencies:
'@uppy/utils': 4.1.3 '@uppy/utils': 4.1.3
@@ -2945,10 +2765,10 @@ snapshots:
'@uppy/utils': 4.1.3 '@uppy/utils': 4.1.3
nanoid: 3.3.12 nanoid: 3.3.12
'@vitejs/plugin-vue@5.2.4(vite@5.4.21(sass@1.99.0)(terser@5.46.2))(vue@3.5.34(typescript@7.0.2))': '@vitejs/plugin-vue@5.2.4(vite@5.4.21(sass@1.99.0)(terser@5.46.2))(vue@3.5.34(typescript@5.9.3))':
dependencies: dependencies:
vite: 5.4.21(sass@1.99.0)(terser@5.46.2) vite: 5.4.21(sass@1.99.0)(terser@5.46.2)
vue: 3.5.34(typescript@7.0.2) vue: 3.5.34(typescript@5.9.3)
'@volar/language-core@2.4.28': '@volar/language-core@2.4.28':
dependencies: dependencies:
@@ -2956,13 +2776,13 @@ snapshots:
'@volar/source-map@2.4.28': {} '@volar/source-map@2.4.28': {}
'@volar/typescript@2.4.28(typescript@7.0.2)': '@volar/typescript@2.4.28(typescript@5.9.3)':
dependencies: dependencies:
'@volar/language-core': 2.4.28 '@volar/language-core': 2.4.28
path-browserify: 1.0.1 path-browserify: 1.0.1
vscode-uri: 3.2.0 vscode-uri: 3.2.0
optionalDependencies: optionalDependencies:
typescript: 7.0.2 typescript: 5.9.3
'@vue/compiler-core@3.5.34': '@vue/compiler-core@3.5.34':
dependencies: dependencies:
@@ -3022,51 +2842,51 @@ snapshots:
'@vue/shared': 3.5.34 '@vue/shared': 3.5.34
csstype: 3.2.3 csstype: 3.2.3
'@vue/server-renderer@3.5.34(vue@3.5.34(typescript@7.0.2))': '@vue/server-renderer@3.5.34(vue@3.5.34(typescript@5.9.3))':
dependencies: dependencies:
'@vue/compiler-ssr': 3.5.34 '@vue/compiler-ssr': 3.5.34
'@vue/shared': 3.5.34 '@vue/shared': 3.5.34
vue: 3.5.34(typescript@7.0.2) vue: 3.5.34(typescript@5.9.3)
'@vue/shared@3.5.34': {} '@vue/shared@3.5.34': {}
'@vueuse/core@14.3.0(vue@3.5.34(typescript@7.0.2))': '@vueuse/core@14.3.0(vue@3.5.34(typescript@5.9.3))':
dependencies: dependencies:
'@types/web-bluetooth': 0.0.21 '@types/web-bluetooth': 0.0.21
'@vueuse/metadata': 14.3.0 '@vueuse/metadata': 14.3.0
'@vueuse/shared': 14.3.0(vue@3.5.34(typescript@7.0.2)) '@vueuse/shared': 14.3.0(vue@3.5.34(typescript@5.9.3))
vue: 3.5.34(typescript@7.0.2) vue: 3.5.34(typescript@5.9.3)
'@vueuse/metadata@14.3.0': {} '@vueuse/metadata@14.3.0': {}
'@vueuse/shared@14.3.0(vue@3.5.34(typescript@7.0.2))': '@vueuse/shared@14.3.0(vue@3.5.34(typescript@5.9.3))':
dependencies: dependencies:
vue: 3.5.34(typescript@7.0.2) vue: 3.5.34(typescript@5.9.3)
'@wangeditor-next/basic-modules@2.0.0(@wangeditor-next/core@1.8.0(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@5.1.11)(slate@0.123.0)(snabbdom@3.6.3))(dom7@3.0.0)(lodash.throttle@4.1.1)(nanoid@5.1.11)(slate@0.123.0)(snabbdom@3.6.3)': '@wangeditor-next/basic-modules@2.0.0(@wangeditor-next/core@1.8.0(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@4.0.6)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@5.1.11)(slate@0.123.0)(snabbdom@3.6.3))(dom7@4.0.6)(lodash.throttle@4.1.1)(nanoid@5.1.11)(slate@0.123.0)(snabbdom@3.6.3)':
dependencies: dependencies:
'@wangeditor-next/core': 1.8.0(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@5.1.11)(slate@0.123.0)(snabbdom@3.6.3) '@wangeditor-next/core': 1.8.0(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@4.0.6)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@5.1.11)(slate@0.123.0)(snabbdom@3.6.3)
dom7: 3.0.0 dom7: 4.0.6
is-url: 1.2.4 is-url: 1.2.4
lodash.throttle: 4.1.1 lodash.throttle: 4.1.1
nanoid: 5.1.11 nanoid: 5.1.11
slate: 0.123.0 slate: 0.123.0
snabbdom: 3.6.3 snabbdom: 3.6.3
'@wangeditor-next/code-highlight@2.0.0(@wangeditor-next/core@1.8.0(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@5.1.11)(slate@0.123.0)(snabbdom@3.6.3))(dom7@4.0.6)(slate@0.123.0)(snabbdom@3.6.3)': '@wangeditor-next/code-highlight@2.0.0(@wangeditor-next/core@1.8.0(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@4.0.6)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@5.1.11)(slate@0.123.0)(snabbdom@3.6.3))(dom7@4.0.6)(slate@0.123.0)(snabbdom@3.6.3)':
dependencies: dependencies:
'@wangeditor-next/core': 1.8.0(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@5.1.11)(slate@0.123.0)(snabbdom@3.6.3) '@wangeditor-next/core': 1.8.0(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@4.0.6)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@5.1.11)(slate@0.123.0)(snabbdom@3.6.3)
dom7: 4.0.6 dom7: 4.0.6
prismjs: 1.30.0 prismjs: 1.30.0
slate: 0.123.0 slate: 0.123.0
snabbdom: 3.6.3 snabbdom: 3.6.3
'@wangeditor-next/core@1.8.0(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@5.1.11)(slate@0.123.0)(snabbdom@3.6.3)': '@wangeditor-next/core@1.8.0(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@4.0.6)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@5.1.11)(slate@0.123.0)(snabbdom@3.6.3)':
dependencies: dependencies:
'@types/event-emitter': 0.3.5 '@types/event-emitter': 0.3.5
'@uppy/core': 2.3.4 '@uppy/core': 2.3.4
'@uppy/xhr-upload': 2.1.3(@uppy/core@2.3.4) '@uppy/xhr-upload': 2.1.3(@uppy/core@2.3.4)
dom7: 3.0.0 dom7: 4.0.6
event-emitter: 0.3.5 event-emitter: 0.3.5
html-void-elements: 3.0.0 html-void-elements: 3.0.0
i18next: 23.16.8 i18next: 23.16.8
@@ -3087,13 +2907,13 @@ snapshots:
dependencies: dependencies:
'@uppy/core': 2.3.4 '@uppy/core': 2.3.4
'@uppy/xhr-upload': 2.1.3(@uppy/core@2.3.4) '@uppy/xhr-upload': 2.1.3(@uppy/core@2.3.4)
'@wangeditor-next/basic-modules': 2.0.0(@wangeditor-next/core@1.8.0(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@5.1.11)(slate@0.123.0)(snabbdom@3.6.3))(dom7@3.0.0)(lodash.throttle@4.1.1)(nanoid@5.1.11)(slate@0.123.0)(snabbdom@3.6.3) '@wangeditor-next/basic-modules': 2.0.0(@wangeditor-next/core@1.8.0(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@4.0.6)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@5.1.11)(slate@0.123.0)(snabbdom@3.6.3))(dom7@4.0.6)(lodash.throttle@4.1.1)(nanoid@5.1.11)(slate@0.123.0)(snabbdom@3.6.3)
'@wangeditor-next/code-highlight': 2.0.0(@wangeditor-next/core@1.8.0(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@5.1.11)(slate@0.123.0)(snabbdom@3.6.3))(dom7@4.0.6)(slate@0.123.0)(snabbdom@3.6.3) '@wangeditor-next/code-highlight': 2.0.0(@wangeditor-next/core@1.8.0(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@4.0.6)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@5.1.11)(slate@0.123.0)(snabbdom@3.6.3))(dom7@4.0.6)(slate@0.123.0)(snabbdom@3.6.3)
'@wangeditor-next/core': 1.8.0(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@5.1.11)(slate@0.123.0)(snabbdom@3.6.3) '@wangeditor-next/core': 1.8.0(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@4.0.6)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@5.1.11)(slate@0.123.0)(snabbdom@3.6.3)
'@wangeditor-next/list-module': 2.0.0(@wangeditor-next/core@1.8.0(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@5.1.11)(slate@0.123.0)(snabbdom@3.6.3))(dom7@4.0.6)(slate@0.123.0)(snabbdom@3.6.3) '@wangeditor-next/list-module': 2.0.0(@wangeditor-next/core@1.8.0(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@4.0.6)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@5.1.11)(slate@0.123.0)(snabbdom@3.6.3))(dom7@4.0.6)(slate@0.123.0)(snabbdom@3.6.3)
'@wangeditor-next/table-module': 2.0.0(@wangeditor-next/core@1.8.0(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@5.1.11)(slate@0.123.0)(snabbdom@3.6.3))(dom7@4.0.6)(lodash.debounce@4.0.8)(lodash.throttle@4.1.1)(nanoid@5.1.11)(slate@0.123.0)(snabbdom@3.6.3) '@wangeditor-next/table-module': 2.0.0(@wangeditor-next/core@1.8.0(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@4.0.6)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@5.1.11)(slate@0.123.0)(snabbdom@3.6.3))(dom7@4.0.6)(lodash.debounce@4.0.8)(lodash.throttle@4.1.1)(nanoid@5.1.11)(slate@0.123.0)(snabbdom@3.6.3)
'@wangeditor-next/upload-image-module': 2.0.0(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(@wangeditor-next/basic-modules@2.0.0(@wangeditor-next/core@1.8.0(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@5.1.11)(slate@0.123.0)(snabbdom@3.6.3))(dom7@3.0.0)(lodash.throttle@4.1.1)(nanoid@5.1.11)(slate@0.123.0)(snabbdom@3.6.3))(@wangeditor-next/core@1.8.0(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@5.1.11)(slate@0.123.0)(snabbdom@3.6.3))(dom7@4.0.6)(lodash.foreach@4.5.0)(slate@0.123.0)(snabbdom@3.6.3) '@wangeditor-next/upload-image-module': 2.0.0(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(@wangeditor-next/basic-modules@2.0.0(@wangeditor-next/core@1.8.0(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@4.0.6)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@5.1.11)(slate@0.123.0)(snabbdom@3.6.3))(dom7@4.0.6)(lodash.throttle@4.1.1)(nanoid@5.1.11)(slate@0.123.0)(snabbdom@3.6.3))(@wangeditor-next/core@1.8.0(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@4.0.6)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@5.1.11)(slate@0.123.0)(snabbdom@3.6.3))(dom7@4.0.6)(lodash.foreach@4.5.0)(slate@0.123.0)(snabbdom@3.6.3)
'@wangeditor-next/video-module': 2.0.0(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(@wangeditor-next/core@1.8.0(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@5.1.11)(slate@0.123.0)(snabbdom@3.6.3))(dom7@4.0.6)(nanoid@5.1.11)(slate@0.123.0)(snabbdom@3.6.3) '@wangeditor-next/video-module': 2.0.0(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(@wangeditor-next/core@1.8.0(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@4.0.6)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@5.1.11)(slate@0.123.0)(snabbdom@3.6.3))(dom7@4.0.6)(nanoid@5.1.11)(slate@0.123.0)(snabbdom@3.6.3)
dom7: 4.0.6 dom7: 4.0.6
is-hotkey: 0.2.0 is-hotkey: 0.2.0
lodash.camelcase: 4.3.0 lodash.camelcase: 4.3.0
@@ -3106,16 +2926,16 @@ snapshots:
slate: 0.123.0 slate: 0.123.0
snabbdom: 3.6.3 snabbdom: 3.6.3
'@wangeditor-next/list-module@2.0.0(@wangeditor-next/core@1.8.0(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@5.1.11)(slate@0.123.0)(snabbdom@3.6.3))(dom7@4.0.6)(slate@0.123.0)(snabbdom@3.6.3)': '@wangeditor-next/list-module@2.0.0(@wangeditor-next/core@1.8.0(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@4.0.6)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@5.1.11)(slate@0.123.0)(snabbdom@3.6.3))(dom7@4.0.6)(slate@0.123.0)(snabbdom@3.6.3)':
dependencies: dependencies:
'@wangeditor-next/core': 1.8.0(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@5.1.11)(slate@0.123.0)(snabbdom@3.6.3) '@wangeditor-next/core': 1.8.0(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@4.0.6)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@5.1.11)(slate@0.123.0)(snabbdom@3.6.3)
dom7: 4.0.6 dom7: 4.0.6
slate: 0.123.0 slate: 0.123.0
snabbdom: 3.6.3 snabbdom: 3.6.3
'@wangeditor-next/table-module@2.0.0(@wangeditor-next/core@1.8.0(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@5.1.11)(slate@0.123.0)(snabbdom@3.6.3))(dom7@4.0.6)(lodash.debounce@4.0.8)(lodash.throttle@4.1.1)(nanoid@5.1.11)(slate@0.123.0)(snabbdom@3.6.3)': '@wangeditor-next/table-module@2.0.0(@wangeditor-next/core@1.8.0(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@4.0.6)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@5.1.11)(slate@0.123.0)(snabbdom@3.6.3))(dom7@4.0.6)(lodash.debounce@4.0.8)(lodash.throttle@4.1.1)(nanoid@5.1.11)(slate@0.123.0)(snabbdom@3.6.3)':
dependencies: dependencies:
'@wangeditor-next/core': 1.8.0(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@5.1.11)(slate@0.123.0)(snabbdom@3.6.3) '@wangeditor-next/core': 1.8.0(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@4.0.6)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@5.1.11)(slate@0.123.0)(snabbdom@3.6.3)
dom7: 4.0.6 dom7: 4.0.6
lodash.debounce: 4.0.8 lodash.debounce: 4.0.8
lodash.throttle: 4.1.1 lodash.throttle: 4.1.1
@@ -3123,22 +2943,22 @@ snapshots:
slate: 0.123.0 slate: 0.123.0
snabbdom: 3.6.3 snabbdom: 3.6.3
'@wangeditor-next/upload-image-module@2.0.0(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(@wangeditor-next/basic-modules@2.0.0(@wangeditor-next/core@1.8.0(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@5.1.11)(slate@0.123.0)(snabbdom@3.6.3))(dom7@3.0.0)(lodash.throttle@4.1.1)(nanoid@5.1.11)(slate@0.123.0)(snabbdom@3.6.3))(@wangeditor-next/core@1.8.0(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@5.1.11)(slate@0.123.0)(snabbdom@3.6.3))(dom7@4.0.6)(lodash.foreach@4.5.0)(slate@0.123.0)(snabbdom@3.6.3)': '@wangeditor-next/upload-image-module@2.0.0(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(@wangeditor-next/basic-modules@2.0.0(@wangeditor-next/core@1.8.0(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@4.0.6)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@5.1.11)(slate@0.123.0)(snabbdom@3.6.3))(dom7@4.0.6)(lodash.throttle@4.1.1)(nanoid@5.1.11)(slate@0.123.0)(snabbdom@3.6.3))(@wangeditor-next/core@1.8.0(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@4.0.6)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@5.1.11)(slate@0.123.0)(snabbdom@3.6.3))(dom7@4.0.6)(lodash.foreach@4.5.0)(slate@0.123.0)(snabbdom@3.6.3)':
dependencies: dependencies:
'@uppy/core': 2.3.4 '@uppy/core': 2.3.4
'@uppy/xhr-upload': 2.1.3(@uppy/core@2.3.4) '@uppy/xhr-upload': 2.1.3(@uppy/core@2.3.4)
'@wangeditor-next/basic-modules': 2.0.0(@wangeditor-next/core@1.8.0(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@5.1.11)(slate@0.123.0)(snabbdom@3.6.3))(dom7@3.0.0)(lodash.throttle@4.1.1)(nanoid@5.1.11)(slate@0.123.0)(snabbdom@3.6.3) '@wangeditor-next/basic-modules': 2.0.0(@wangeditor-next/core@1.8.0(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@4.0.6)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@5.1.11)(slate@0.123.0)(snabbdom@3.6.3))(dom7@4.0.6)(lodash.throttle@4.1.1)(nanoid@5.1.11)(slate@0.123.0)(snabbdom@3.6.3)
'@wangeditor-next/core': 1.8.0(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@5.1.11)(slate@0.123.0)(snabbdom@3.6.3) '@wangeditor-next/core': 1.8.0(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@4.0.6)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@5.1.11)(slate@0.123.0)(snabbdom@3.6.3)
dom7: 4.0.6 dom7: 4.0.6
lodash.foreach: 4.5.0 lodash.foreach: 4.5.0
slate: 0.123.0 slate: 0.123.0
snabbdom: 3.6.3 snabbdom: 3.6.3
'@wangeditor-next/video-module@2.0.0(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(@wangeditor-next/core@1.8.0(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@5.1.11)(slate@0.123.0)(snabbdom@3.6.3))(dom7@4.0.6)(nanoid@5.1.11)(slate@0.123.0)(snabbdom@3.6.3)': '@wangeditor-next/video-module@2.0.0(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(@wangeditor-next/core@1.8.0(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@4.0.6)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@5.1.11)(slate@0.123.0)(snabbdom@3.6.3))(dom7@4.0.6)(nanoid@5.1.11)(slate@0.123.0)(snabbdom@3.6.3)':
dependencies: dependencies:
'@uppy/core': 2.3.4 '@uppy/core': 2.3.4
'@uppy/xhr-upload': 2.1.3(@uppy/core@2.3.4) '@uppy/xhr-upload': 2.1.3(@uppy/core@2.3.4)
'@wangeditor-next/core': 1.8.0(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@5.1.11)(slate@0.123.0)(snabbdom@3.6.3) '@wangeditor-next/core': 1.8.0(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@4.0.6)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@5.1.11)(slate@0.123.0)(snabbdom@3.6.3)
dom7: 4.0.6 dom7: 4.0.6
nanoid: 5.1.11 nanoid: 5.1.11
slate: 0.123.0 slate: 0.123.0
@@ -3185,10 +3005,10 @@ snapshots:
slate-history: 0.66.0(slate@0.72.8) slate-history: 0.66.0(slate@0.72.8)
snabbdom: 3.6.3 snabbdom: 3.6.3
'@wangeditor/editor-for-vue@5.1.12(@wangeditor/editor@5.1.23)(vue@3.5.34(typescript@7.0.2))': '@wangeditor/editor-for-vue@5.1.12(@wangeditor/editor@5.1.23)(vue@3.5.34(typescript@5.9.3))':
dependencies: dependencies:
'@wangeditor/editor': 5.1.23 '@wangeditor/editor': 5.1.23
vue: 3.5.34(typescript@7.0.2) vue: 3.5.34(typescript@5.9.3)
'@wangeditor/editor@5.1.23': '@wangeditor/editor@5.1.23':
dependencies: dependencies:
@@ -3317,12 +3137,12 @@ snapshots:
asynckit@0.4.0: {} asynckit@0.4.0: {}
avue-plugin-ueditor@1.0.4(axios@1.16.0(debug@4.4.3(supports-color@7.2.0)))(vue@3.5.34(typescript@7.0.2)): avue-plugin-ueditor@1.0.4(axios@1.16.0(debug@4.4.3(supports-color@7.2.0)))(vue@3.5.34(typescript@5.9.3)):
dependencies: dependencies:
'@wangeditor/editor': 5.1.23 '@wangeditor/editor': 5.1.23
'@wangeditor/editor-for-vue': 5.1.12(@wangeditor/editor@5.1.23)(vue@3.5.34(typescript@7.0.2)) '@wangeditor/editor-for-vue': 5.1.12(@wangeditor/editor@5.1.23)(vue@3.5.34(typescript@5.9.3))
axios: 1.16.0(debug@4.4.3(supports-color@7.2.0)) axios: 1.16.0(debug@4.4.3(supports-color@7.2.0))
vue: 3.5.34(typescript@7.0.2) vue: 3.5.34(typescript@5.9.3)
axios@0.21.4(debug@4.4.3(supports-color@7.2.0)): axios@0.21.4(debug@4.4.3(supports-color@7.2.0)):
dependencies: dependencies:
@@ -3575,15 +3395,15 @@ snapshots:
tslib: 2.3.0 tslib: 2.3.0
zrender: 6.1.0 zrender: 6.1.0
element-plus@2.14.2(vue@3.5.34(typescript@7.0.2)): element-plus@2.14.2(vue@3.5.34(typescript@5.9.3)):
dependencies: dependencies:
'@ctrl/tinycolor': 4.2.0 '@ctrl/tinycolor': 4.2.0
'@element-plus/icons-vue': 2.3.2(vue@3.5.34(typescript@7.0.2)) '@element-plus/icons-vue': 2.3.2(vue@3.5.34(typescript@5.9.3))
'@floating-ui/dom': 1.7.6 '@floating-ui/dom': 1.7.6
'@popperjs/core': '@sxzz/popperjs-es@2.11.8' '@popperjs/core': '@sxzz/popperjs-es@2.11.8'
'@types/lodash': 4.17.24 '@types/lodash': 4.17.24
'@types/lodash-es': 4.17.12 '@types/lodash-es': 4.17.12
'@vueuse/core': 14.3.0(vue@3.5.34(typescript@7.0.2)) '@vueuse/core': 14.3.0(vue@3.5.34(typescript@5.9.3))
async-validator: 4.2.5 async-validator: 4.2.5
dayjs: 1.11.20 dayjs: 1.11.20
lodash: 4.18.1 lodash: 4.18.1
@@ -3591,7 +3411,7 @@ snapshots:
lodash-unified: 1.0.3(@types/lodash-es@4.17.12)(lodash-es@4.18.1)(lodash@4.18.1) lodash-unified: 1.0.3(@types/lodash-es@4.17.12)(lodash-es@4.18.1)(lodash@4.18.1)
memoize-one: 6.0.0 memoize-one: 6.0.0
normalize-wheel-es: 1.2.0 normalize-wheel-es: 1.2.0
vue: 3.5.34(typescript@7.0.2) vue: 3.5.34(typescript@5.9.3)
vue-component-type-helpers: 3.3.6 vue-component-type-helpers: 3.3.6
end-of-stream@1.4.5: end-of-stream@1.4.5:
@@ -4352,28 +4172,7 @@ snapshots:
typedarray@0.0.6: {} typedarray@0.0.6: {}
typescript@7.0.2: typescript@5.9.3: {}
optionalDependencies:
'@typescript/typescript-aix-ppc64': 7.0.2
'@typescript/typescript-darwin-arm64': 7.0.2
'@typescript/typescript-darwin-x64': 7.0.2
'@typescript/typescript-freebsd-arm64': 7.0.2
'@typescript/typescript-freebsd-x64': 7.0.2
'@typescript/typescript-linux-arm': 7.0.2
'@typescript/typescript-linux-arm64': 7.0.2
'@typescript/typescript-linux-loong64': 7.0.2
'@typescript/typescript-linux-mips64el': 7.0.2
'@typescript/typescript-linux-ppc64': 7.0.2
'@typescript/typescript-linux-riscv64': 7.0.2
'@typescript/typescript-linux-s390x': 7.0.2
'@typescript/typescript-linux-x64': 7.0.2
'@typescript/typescript-netbsd-arm64': 7.0.2
'@typescript/typescript-netbsd-x64': 7.0.2
'@typescript/typescript-openbsd-arm64': 7.0.2
'@typescript/typescript-openbsd-x64': 7.0.2
'@typescript/typescript-sunos-x64': 7.0.2
'@typescript/typescript-win32-arm64': 7.0.2
'@typescript/typescript-win32-x64': 7.0.2
ufo@1.6.4: {} ufo@1.6.4: {}
@@ -4397,7 +4196,7 @@ snapshots:
universalify@2.0.1: {} universalify@2.0.1: {}
unplugin-auto-import@0.11.5(@vueuse/core@14.3.0(vue@3.5.34(typescript@7.0.2)))(rollup@4.60.3): unplugin-auto-import@0.11.5(@vueuse/core@14.3.0(vue@3.5.34(typescript@5.9.3)))(rollup@4.60.3):
dependencies: dependencies:
'@antfu/utils': 0.7.10 '@antfu/utils': 0.7.10
'@rollup/pluginutils': 5.3.0(rollup@4.60.3) '@rollup/pluginutils': 5.3.0(rollup@4.60.3)
@@ -4406,7 +4205,7 @@ snapshots:
unimport: 1.3.0(rollup@4.60.3) unimport: 1.3.0(rollup@4.60.3)
unplugin: 1.16.1 unplugin: 1.16.1
optionalDependencies: optionalDependencies:
'@vueuse/core': 14.3.0(vue@3.5.34(typescript@7.0.2)) '@vueuse/core': 14.3.0(vue@3.5.34(typescript@5.9.3))
transitivePeerDependencies: transitivePeerDependencies:
- rollup - rollup
@@ -4465,54 +4264,54 @@ snapshots:
vue-component-type-helpers@3.3.6: {} vue-component-type-helpers@3.3.6: {}
vue-i18n@11.4.2(vue@3.5.34(typescript@7.0.2)): vue-i18n@11.4.2(vue@3.5.34(typescript@5.9.3)):
dependencies: dependencies:
'@intlify/core-base': 11.4.2 '@intlify/core-base': 11.4.2
'@intlify/devtools-types': 11.4.2 '@intlify/devtools-types': 11.4.2
'@intlify/shared': 11.4.2 '@intlify/shared': 11.4.2
'@vue/devtools-api': 6.6.4 '@vue/devtools-api': 6.6.4
vue: 3.5.34(typescript@7.0.2) vue: 3.5.34(typescript@5.9.3)
vue-pdf-embed@2.1.6(vue@3.5.34(typescript@7.0.2)): vue-pdf-embed@2.1.6(vue@3.5.34(typescript@5.9.3)):
dependencies: dependencies:
pdfjs-dist: 6.2.108 pdfjs-dist: 6.2.108
vue: 3.5.34(typescript@7.0.2) vue: 3.5.34(typescript@5.9.3)
vue-router@4.6.4(vue@3.5.34(typescript@7.0.2)): vue-router@4.6.4(vue@3.5.34(typescript@5.9.3)):
dependencies: dependencies:
'@vue/devtools-api': 6.6.4 '@vue/devtools-api': 6.6.4
vue: 3.5.34(typescript@7.0.2) vue: 3.5.34(typescript@5.9.3)
vue-tsc@3.3.13(typescript@7.0.2): vue-tsc@3.3.13(typescript@5.9.3):
dependencies: dependencies:
'@volar/typescript': 2.4.28(typescript@7.0.2) '@volar/typescript': 2.4.28(typescript@5.9.3)
'@vue/language-core': 3.3.13 '@vue/language-core': 3.3.13
typescript: 7.0.2 typescript: 5.9.3
vue3-clipboard@1.0.0(vue@3.5.34(typescript@7.0.2)): vue3-clipboard@1.0.0(vue@3.5.34(typescript@5.9.3)):
dependencies: dependencies:
clipboard: 2.0.11 clipboard: 2.0.11
vue: 3.5.34(typescript@7.0.2) vue: 3.5.34(typescript@5.9.3)
vue@3.5.34(typescript@7.0.2): vue@3.5.34(typescript@5.9.3):
dependencies: dependencies:
'@vue/compiler-dom': 3.5.34 '@vue/compiler-dom': 3.5.34
'@vue/compiler-sfc': 3.5.34 '@vue/compiler-sfc': 3.5.34
'@vue/runtime-dom': 3.5.34 '@vue/runtime-dom': 3.5.34
'@vue/server-renderer': 3.5.34(vue@3.5.34(typescript@7.0.2)) '@vue/server-renderer': 3.5.34(vue@3.5.34(typescript@5.9.3))
'@vue/shared': 3.5.34 '@vue/shared': 3.5.34
optionalDependencies: optionalDependencies:
typescript: 7.0.2 typescript: 5.9.3
vuedraggable@4.1.0(vue@3.5.34(typescript@7.0.2)): vuedraggable@4.1.0(vue@3.5.34(typescript@5.9.3)):
dependencies: dependencies:
sortablejs: 1.14.0 sortablejs: 1.14.0
vue: 3.5.34(typescript@7.0.2) vue: 3.5.34(typescript@5.9.3)
vuex@4.1.0(vue@3.5.34(typescript@7.0.2)): vuex@4.1.0(vue@3.5.34(typescript@5.9.3)):
dependencies: dependencies:
'@vue/devtools-api': 6.6.4 '@vue/devtools-api': 6.6.4
vue: 3.5.34(typescript@7.0.2) vue: 3.5.34(typescript@5.9.3)
webpack-virtual-modules@0.6.2: {} webpack-virtual-modules@0.6.2: {}
+37
View File
@@ -2,6 +2,43 @@ import request from '@/axios';
const baseUrl = '/blade-transport/hcs'; const baseUrl = '/blade-transport/hcs';
/** 进程内缓存,避免列表页重复请求推送开关 */
let immediateEnabledCache = null;
let immediateEnabledPromise = null;
/**
* 查询 HCS 即时推送开关(thirdParty.hcs.push.immediate-enabled)。
* 关闭时项目管理/合同管理隐藏「推送合规」「批量推送合规」。
*/
export const getPushConfig = () =>
request({
url: `${baseUrl}/push-config`,
method: 'get',
});
export const loadHcsImmediateEnabled = () => {
if (immediateEnabledCache !== null) {
return Promise.resolve(immediateEnabledCache);
}
if (immediateEnabledPromise) {
return immediateEnabledPromise;
}
immediateEnabledPromise = getPushConfig()
.then(res => {
const data = res?.data?.data ?? res?.data ?? {};
immediateEnabledCache = data.immediateEnabled === true || data.immediateEnabled === 'true';
return immediateEnabledCache;
})
.catch(() => {
immediateEnabledCache = false;
return false;
})
.finally(() => {
immediateEnabledPromise = null;
});
return immediateEnabledPromise;
};
// 合规推送涉及 HCS 远程多次调用(风险校验+附件转传+起草),可达 20s+,覆盖全局 10s 超时 // 合规推送涉及 HCS 远程多次调用(风险校验+附件转传+起草),可达 20s+,覆盖全局 10s 超时
export const repush = (bizType, id) => export const repush = (bizType, id) =>
request({ request({
+16
View File
@@ -104,6 +104,22 @@ export default [
}, },
], ],
}, },
{
// 兼容旧菜单路径:按 detailNo 解析应付/应收后跳转到拆分后的列表页
path: '/settlement/formal-settlement',
component: Layout,
children: [
{
path: '',
name: '正式结算单兼容跳转',
meta: {
keepAlive: false,
activeMenu: '/settlement/payment-settlement',
},
component: loadView(() => import('@/views/settlement/formal-settlement-redirect.vue')),
},
],
},
{ {
path: '/settlement/formal-settlement/form', path: '/settlement/formal-settlement/form',
component: Layout, component: Layout,
+19 -1
View File
@@ -280,6 +280,23 @@ export default {
.filter(Boolean)[0] || ''; .filter(Boolean)[0] || '';
}, },
applyDefaultDeptSearch() { applyDefaultDeptSearch() {
// 超管默认不限组织,避免预填当前组织后看不到其他组织/无组织数据。
if (this.isAdmin) {
const deptColumn = this.findColumn(this.option.column, 'searchDeptId');
if (deptColumn) {
deptColumn.searchValue = undefined;
}
const nextQuery = { ...this.query };
delete nextQuery.deptId;
delete nextQuery.searchDeptId;
this.query = nextQuery;
this.$nextTick(() => {
if (this.$refs.crud?.searchForm) {
this.$refs.crud.searchForm.searchDeptId = undefined;
}
});
return;
}
const deptId = this.defaultDeptId(); const deptId = this.defaultDeptId();
const deptColumn = this.findColumn(this.option.column, 'searchDeptId'); const deptColumn = this.findColumn(this.option.column, 'searchDeptId');
if (!deptId || !deptColumn) return; if (!deptId || !deptColumn) return;
@@ -298,7 +315,8 @@ export default {
if (deptColumn) { if (deptColumn) {
deptColumn.dicData = this.deptOptions; deptColumn.dicData = this.deptOptions;
} }
// dicData 异步到位后再回填,避免下拉选项为空时清空已选组织,导致请求丢失 deptId。 // 超管不回填默认组织;普通用户在 dicData 到位后再回填,避免下拉清空已选组织。
if (this.isAdmin) return;
const deptId = String(this.query.deptId || this.defaultDeptId() || ''); const deptId = String(this.query.deptId || this.defaultDeptId() || '');
if (!deptId) return; if (!deptId) return;
if (deptColumn) { if (deptColumn) {
@@ -352,7 +352,12 @@
@opened="loadAddressList" @opened="loadAddressList"
> >
<div class="route-dialog__search common-address-dialog__search"> <div class="route-dialog__search common-address-dialog__search">
<el-form :model="addressQuery" label-position="right" label-width="auto"> <el-form
class="dialog-form-label-fixed"
:model="addressQuery"
label-position="right"
label-width="96px"
>
<el-row :gutter="16"> <el-row :gutter="16">
<el-col :span="6"> <el-col :span="6">
<el-form-item label="地址名称"> <el-form-item label="地址名称">
@@ -446,7 +451,12 @@
@opened="loadStationList" @opened="loadStationList"
> >
<div class="route-dialog__search"> <div class="route-dialog__search">
<el-form :model="stationQuery" label-position="right" label-width="auto"> <el-form
class="dialog-form-label-fixed"
:model="stationQuery"
label-position="right"
label-width="96px"
>
<el-row :gutter="16"> <el-row :gutter="16">
<el-col :span="8"><el-form-item label="站点名称"><el-input v-model="stationQuery.name" clearable placeholder="请输入" /></el-form-item></el-col> <el-col :span="8"><el-form-item label="站点名称"><el-input v-model="stationQuery.name" clearable placeholder="请输入" /></el-form-item></el-col>
<el-col :span="8"><el-form-item label="详细地址"><el-input v-model="stationQuery.detailAddress" clearable placeholder="请输入" /></el-form-item></el-col> <el-col :span="8"><el-form-item label="详细地址"><el-input v-model="stationQuery.detailAddress" clearable placeholder="请输入" /></el-form-item></el-col>
@@ -652,6 +662,8 @@ export default {
addressQuery: {}, addressQuery: {},
addressPage: { current: 1, size: 10, total: 0 }, addressPage: { current: 1, size: 10, total: 0 },
addressRegionPaths: { departure: [], arrival: [] }, addressRegionPaths: { departure: [], arrival: [] },
// 程序回填省市区时抑制 cascader @change,避免空值回调把已填地址清空
suppressAddressRegionChange: false,
regionOptions: [], regionOptions: [],
regionLoading: false, regionLoading: false,
regionRequest: null, regionRequest: null,
@@ -889,26 +901,63 @@ export default {
findRegionPathByName(options = [], regionName = '', parents = []) { findRegionPathByName(options = [], regionName = '', parents = []) {
const target = String(regionName || '').replace(/\s+/g, ''); const target = String(regionName || '').replace(/\s+/g, '');
if (!target) return []; if (!target) return [];
let suffixMatch = [];
for (const item of options) { for (const item of options) {
const nextParents = [...parents, item]; const nextParents = [...parents, item];
const name = nextParents.map(region => region.title || region.name || '').join(''); const name = nextParents.map(region => region.title || region.name || '').join('');
if (name === target) return nextParents.map(region => region.id); if (name === target) return nextParents.map(region => region.id);
// 常用地址可能缺省名,允许「市+区」后缀命中完整省市区路径
if (!suffixMatch.length && name.endsWith(target) && target.length >= 2) {
suffixMatch = nextParents.map(region => region.id);
}
const path = this.findRegionPathByName(item.children, target, nextParents); const path = this.findRegionPathByName(item.children, target, nextParents);
if (path.length) return path; if (path.length) return path;
} }
return []; return suffixMatch;
}, },
findRegionPathByCode(options = [], regionCode = '', parents = []) { findRegionPathByCode(options = [], regionCode = '', parents = []) {
const target = String(regionCode || '').trim(); const target = String(regionCode || '').trim();
if (!target) return []; if (!target) return [];
for (const item of options) { for (const item of options) {
const nextParents = [...parents, item]; const nextParents = [...parents, item];
if (String(item.id) === target) return nextParents.map(region => region.id); if (String(item.id) === target || String(item.value || '') === target) {
return nextParents.map(region => region.id);
}
const path = this.findRegionPathByCode(item.children, target, nextParents); const path = this.findRegionPathByCode(item.children, target, nextParents);
if (path.length) return path; if (path.length) return path;
} }
return []; return [];
}, },
resolveRegionPath(field) {
if (!field) return [];
const codePath = this.findRegionPathByCode(
this.regionOptions,
field.model[field.regionCode]
);
if (codePath.length) return codePath;
const namePath = this.findRegionPathByName(this.regionOptions, field.model[field.name]);
if (namePath.length) return namePath;
const composed = [field.model[field.provinceName], field.model[field.cityName], field.model[field.districtName]]
.filter(Boolean)
.join('');
return this.findRegionPathByName(this.regionOptions, composed);
},
setAddressRegionPath(target, path = []) {
const nextPath = Array.isArray(path) ? path.map(item => String(item)) : [];
const current = this.addressRegionPaths[target] || [];
if (
current.length === nextPath.length &&
current.every((item, index) => String(item) === String(nextPath[index]))
) {
return;
}
this.suppressAddressRegionChange = true;
// Vue3 直接写动态 key,避免整体替换对象导致其它 cascader 重建并触发空 @change
this.addressRegionPaths[target] = nextPath;
this.$nextTick(() => {
this.suppressAddressRegionChange = false;
});
},
regionLabels(path = []) { regionLabels(path = []) {
let options = this.regionOptions; let options = this.regionOptions;
const labels = []; const labels = [];
@@ -947,10 +996,22 @@ export default {
this.setAddressRegionNames(field, [provinceMatch?.[0], cityMatch?.[0], districtMatch?.[0]]); this.setAddressRegionNames(field, [provinceMatch?.[0], cityMatch?.[0], districtMatch?.[0]]);
}, },
handleAddressRegionChange(target, value) { handleAddressRegionChange(target, value) {
if (this.suppressAddressRegionChange) return;
const field = this.addressModel(target); const field = this.addressModel(target);
const path = Array.isArray(value) ? value.map(item => String(item)) : []; const path = Array.isArray(value) ? value.map(item => String(item)) : [];
this.addressRegionPaths = { ...this.addressRegionPaths, [target]: path }; this.setAddressRegionPath(target, path);
if (!field) return; if (!field) return;
// 程序回填/重建过程中 cascader 可能短暂抛出空值,不能据此清空已选常用地址
if (!path.length) {
const hasExisting =
String(field.model[field.name] || '').trim() ||
String(field.model[field.address] || '').trim() ||
String(field.model[field.regionCode] || '').trim();
if (hasExisting) {
this.$nextTick(() => this.syncAddressRegionPath(target));
return;
}
}
const labels = this.regionLabels(path); const labels = this.regionLabels(path);
field.model[field.name] = labels.join(''); field.model[field.name] = labels.join('');
field.model[field.regionCode] = path.at(-1) || ''; field.model[field.regionCode] = path.at(-1) || '';
@@ -959,19 +1020,29 @@ export default {
}, },
syncAddressRegionPath(target) { syncAddressRegionPath(target) {
const field = this.addressModel(target); const field = this.addressModel(target);
if (!field) return; if (!field || !this.regionOptions.length) return;
const codePath = this.findRegionPathByCode(this.regionOptions, field.model[field.regionCode]); const path = this.resolveRegionPath(field);
const path = codePath.length this.setAddressRegionPath(target, path);
? codePath
: this.findRegionPathByName(this.regionOptions, field.model[field.name]);
this.addressRegionPaths = { ...this.addressRegionPaths, [target]: path };
if (path.length) this.setAddressRegionNames(field, this.regionLabels(path)); if (path.length) this.setAddressRegionNames(field, this.regionLabels(path));
}, },
syncAddressRegionPaths() { syncAddressRegionPaths() {
if (!this.regionOptions.length) return; if (!this.regionOptions.length) return;
['departure', 'arrival', ...this.form.routes.map((route, index) => `route-${index}`)].forEach(target => { this.suppressAddressRegionChange = true;
this.syncAddressRegionPath(target); try {
}); ['departure', 'arrival', ...this.form.routes.map((route, index) => `route-${index}`)].forEach(
target => {
const field = this.addressModel(target);
if (!field) return;
const path = this.resolveRegionPath(field);
this.addressRegionPaths[target] = path;
if (path.length) this.setAddressRegionNames(field, this.regionLabels(path));
}
);
} finally {
this.$nextTick(() => {
this.suppressAddressRegionChange = false;
});
}
}, },
async loadDetail(id) { async loadDetail(id) {
const res = await api.getDetail(id); const res = await api.getDetail(id);
@@ -1145,13 +1216,15 @@ export default {
}; };
}, },
addressTransportType(target) { addressTransportType(target) {
if (target.startsWith('route-')) { const key = String(target || '');
return this.form.routes[Number(target.slice(6))]?.transportType || ''; if (key.startsWith('route-')) {
return String(this.form.routes[Number(key.slice(6))]?.transportType || '');
} }
return target === 'arrival' ? this.form.finalTransportType : this.form.routes[0]?.transportType || ''; if (key === 'arrival') return String(this.form.finalTransportType || '');
return String(this.form.routes[0]?.transportType || '');
}, },
addressTransportMode(target) { addressTransportMode(target) {
const type = this.addressTransportType(target); const type = String(this.addressTransportType(target) || '');
if (type.includes('铁路')) return 'rail'; if (type.includes('铁路')) return 'rail';
if (type.includes('水路') || type.includes('水运') || type.includes('海运')) return 'water'; if (type.includes('水路') || type.includes('水运') || type.includes('海运')) return 'water';
if (type.includes('航空') || type.includes('空运')) return 'air'; if (type.includes('航空') || type.includes('空运')) return 'air';
@@ -1168,25 +1241,11 @@ export default {
// 展示模式由已选数据决定:有站点编码则显示站点名,否则省市区;暂不按运输方式强制站点限制。 // 展示模式由已选数据决定:有站点编码则显示站点名,否则省市区;暂不按运输方式强制站点限制。
return Boolean(siteCode && siteCode !== '/'); return Boolean(siteCode && siteCode !== '/');
}, },
hasAddressValue(target) {
const field = this.addressModel(target);
if (!field) return false;
return Boolean(
String(field.model[field.address] || '').trim() || String(field.model[field.name] || '').trim()
);
},
tipEmptyAddressDetail(target) {
// 替代原「请先选择运输方式」placeholder:空地址点击时 toast,已有值不再提示。
if (!this.hasAddressValue(target)) {
this.$message.warning('请输入详细地址');
}
},
resolveAddressRegionCode(row = {}) { resolveAddressRegionCode(row = {}) {
return row.regionCode || row.districtCode || row.areaCode || row.adcode || ''; return row.regionCode || row.districtCode || row.areaCode || row.adcode || '';
}, },
openCommonAddress(target) { openCommonAddress(target) {
if (this.isBasicRouteReadonly) return; if (this.isBasicRouteReadonly) return;
this.tipEmptyAddressDetail(target);
this.addressTarget = target; this.addressTarget = target;
// 暂不按运输方式限制站点:统一走常用地址选择。 // 暂不按运输方式限制站点:统一走常用地址选择。
this.addressQuery = {}; this.addressQuery = {};
@@ -1233,8 +1292,9 @@ export default {
this.stationPage.current = 1; this.stationPage.current = 1;
this.loadStationList(); this.loadStationList();
}, },
selectStation(row) { async selectStation(row) {
const target = this.addressModel(this.addressTarget); const targetKey = this.addressTarget;
const target = this.addressModel(targetKey);
if (!target) return; if (!target) return;
const station = this.normalizeStation(row); const station = this.normalizeStation(row);
target.model[target.name] = station.stationName || station.regionName; target.model[target.name] = station.stationName || station.regionName;
@@ -1245,7 +1305,9 @@ export default {
target.model[target.siteCode] = station.stationCode; target.model[target.siteCode] = station.stationCode;
this.setAddressRegionNamesFromRow(target, station); this.setAddressRegionNamesFromRow(target, station);
this.stationDialogVisible = false; this.stationDialogVisible = false;
this.loadRegionOptions().then(() => this.syncAddressRegionPath(this.addressTarget)); await this.loadRegionOptions();
await this.$nextTick();
this.syncAddressRegionPath(targetKey);
}, },
async loadAddressList() { async loadAddressList() {
this.addressLoading = true; this.addressLoading = true;
@@ -1271,8 +1333,9 @@ export default {
this.addressPage.current = 1; this.addressPage.current = 1;
this.loadAddressList(); this.loadAddressList();
}, },
selectAddress(row) { async selectAddress(row) {
const target = this.addressModel(this.addressTarget); const targetKey = this.addressTarget;
const target = this.addressModel(targetKey);
if (!target) return; if (!target) return;
target.model[target.name] = row.regionName || row.addressName || ''; target.model[target.name] = row.regionName || row.addressName || '';
target.model[target.address] = row.detailAddress || row.address || ''; target.model[target.address] = row.detailAddress || row.address || '';
@@ -1284,11 +1347,13 @@ export default {
target.model[target.siteCode] = ''; target.model[target.siteCode] = '';
this.setAddressRegionNamesFromRow(target, row); this.setAddressRegionNamesFromRow(target, row);
this.addressDialogVisible = false; this.addressDialogVisible = false;
this.loadRegionOptions().then(() => this.syncAddressRegionPath(this.addressTarget)); await this.loadRegionOptions();
// nextTick 确保途经点动态 key 已挂载 cascader 后再回填路径
await this.$nextTick();
this.syncAddressRegionPath(targetKey);
}, },
handleAddressDetailClick(target) { handleAddressDetailClick(target) {
if (this.isBasicRouteReadonly) return; if (this.isBasicRouteReadonly) return;
this.tipEmptyAddressDetail(target);
this.openAddressMap(target); this.openAddressMap(target);
}, },
openAddressMap(target) { openAddressMap(target) {
@@ -1803,12 +1868,23 @@ export default {
}, },
addRoute() { addRoute() {
if (this.isBasicRouteReadonly) return; if (this.isBasicRouteReadonly) return;
this.form.routes.push(this.createRoute()); const index = this.form.routes.length;
this.form.routes.push(this.createRoute(index));
this.addressRegionPaths[`route-${index}`] = [];
}, },
removeRoute(index) { removeRoute(index) {
if (this.isBasicRouteReadonly) return; if (this.isBasicRouteReadonly) return;
this.form.routes.splice(index, 1); this.form.routes.splice(index, 1);
this.syncAddressRegionPaths(); const nextPaths = { departure: this.addressRegionPaths.departure || [], arrival: this.addressRegionPaths.arrival || [] };
this.form.routes.forEach((route, routeIndex) => {
nextPaths[`route-${routeIndex}`] = this.addressRegionPaths[`route-${routeIndex >= index ? routeIndex + 1 : routeIndex}`] || [];
});
this.suppressAddressRegionChange = true;
this.addressRegionPaths = nextPaths;
this.$nextTick(() => {
this.suppressAddressRegionChange = false;
this.syncAddressRegionPaths();
});
}, },
goodsKey(row = {}) { goodsKey(row = {}) {
return `${row.cargoName || ''}\u0000${row.cargoType || ''}`; return `${row.cargoName || ''}\u0000${row.cargoType || ''}`;
@@ -5116,11 +5116,16 @@ export default {
); );
}, },
canCopy(row) { canCopy(row) {
if (!row) return false;
// 归属本账号可见范围的运单允许复制。跨组织但项目归属本账号的记录会被标成只读,
// 只读仅拦截编辑/删除,不拦截复制。具备查看、新增、编辑或复制权限即可使用。
return ( return (
this.hasAction('copy') && this.hasAction('copy') &&
this.hasPermission(`${this.config.permission}_copy`) &&
!this.readonlyScope && !this.readonlyScope &&
!row.readonly (this.hasPermission(`${this.config.permission}_copy`) ||
this.hasPermission(`${this.config.permission}_add`) ||
this.hasPermission(`${this.config.permission}_edit`) ||
this.hasPermission(`${this.config.permission}_view`))
); );
}, },
canEnable(row) { canEnable(row) {
+22 -2
View File
@@ -33,6 +33,7 @@
批量导出 批量导出
</el-button> </el-button>
<el-button <el-button
v-if="hcsImmediateEnabled"
type="warning" type="warning"
plain plain
:loading="hcsRepushingId === 'batch'" :loading="hcsRepushingId === 'batch'"
@@ -133,7 +134,11 @@
> >
{{ operation.label }} {{ operation.label }}
</el-link> </el-link>
<el-link v-if="canHcsRepush(row)" type="warning" @click="handleHcsRepush(row)"> <el-link
v-if="hcsImmediateEnabled && canHcsRepush(row)"
type="warning"
@click="handleHcsRepush(row)"
>
{{ hcsRepushingId === row.id ? '推送中…' : '推送合规' }} {{ hcsRepushingId === row.id ? '推送中…' : '推送合规' }}
</el-link> </el-link>
<el-link v-if="canDelete(row)" type="danger" @click="removeRow(row)">删除</el-link> <el-link v-if="canDelete(row)" type="danger" @click="removeRow(row)">删除</el-link>
@@ -1111,6 +1116,12 @@ import 'nprogress/nprogress.css';
import { exportBlob } from '@/api/common'; import { exportBlob } from '@/api/common';
import * as api from '@/api/business/contract-manage'; import * as api from '@/api/business/contract-manage';
import { createFromContract } from '@/api/business/contract-change'; import { createFromContract } from '@/api/business/contract-change';
import {
getRisk,
loadHcsImmediateEnabled,
repush as hcsRepush,
repushBatch as hcsRepushBatch,
} from '@/api/business/hcs';
import { repush as hcsRepush, repushBatch as hcsRepushBatch, getRisk } from '@/api/business/hcs'; import { repush as hcsRepush, repushBatch as hcsRepushBatch, getRisk } from '@/api/business/hcs';
import { isContractBlack, isRiskyTag, resolveRiskTagName } from '@/utils/risk-display'; import { isContractBlack, isRiskyTag, resolveRiskTagName } from '@/utils/risk-display';
import { Position } from '@element-plus/icons-vue'; import { Position } from '@element-plus/icons-vue';
@@ -1449,8 +1460,9 @@ export default {
billCycleTypeOptions: ['固定截单日', '自然月', '自定义多周期'], billCycleTypeOptions: ['固定截单日', '自然月', '自定义多周期'],
detailLoading: false, detailLoading: false,
detailRow: {}, detailRow: {},
// 合规(HCS)推送/对账状态 // 合规(HCS)推送/对账状态;受 thirdParty.hcs.push.immediate-enabled 控制显隐
hcsRepushingId: null, hcsRepushingId: null,
hcsImmediateEnabled: false,
detailContractFileRows: [], detailContractFileRows: [],
detailAttachmentRows: [], detailAttachmentRows: [],
detailBillingPlanRows: [], detailBillingPlanRows: [],
@@ -1721,6 +1733,13 @@ export default {
.catch(() => { .catch(() => {
this.mkEnabled = false; this.mkEnabled = false;
}); });
loadHcsImmediateEnabled()
.then(enabled => {
this.hcsImmediateEnabled = !!enabled;
})
.catch(() => {
this.hcsImmediateEnabled = false;
});
} }
if (this.isFormPage) this.initFormPage(); if (this.isFormPage) this.initFormPage();
if (this.isDetailPage) this.initDetailPage(); if (this.isDetailPage) this.initDetailPage();
@@ -1790,6 +1809,7 @@ export default {
}, },
canHcsRepush(row) { canHcsRepush(row) {
return ( return (
this.hcsImmediateEnabled &&
['approved', 'change_approved'].includes(row.approvalStatus) && ['approved', 'change_approved'].includes(row.approvalStatus) &&
row.hcsSyncStatus !== 'synced' row.hcsSyncStatus !== 'synced'
); );
+2 -2
View File
@@ -4023,7 +4023,7 @@ export default {
exists.add(key); exists.add(key);
} }
}); });
// 承运商类型:新增后须仍存在共同的承运商合同乙方(按客户合同甲方匹配后取交集) // 承运商类型:新增后须仍存在共同的承运商合同乙方(按客户合同乙方=承运商合同甲方匹配后取交集)
if ( if (
String(this.dialogForm.carrierType || '').trim() === '承运商' && String(this.dialogForm.carrierType || '').trim() === '承运商' &&
nextRows.length > this.selectedWaybillRows.length nextRows.length > this.selectedWaybillRows.length
@@ -4744,7 +4744,7 @@ export default {
} }
this.taskCarrierLoading = true; this.taskCarrierLoading = true;
try { try {
// 配载单只有一个项目;传入子运单后按客户合同甲方匹配并取承运商合同乙方交集 // 配载单只有一个项目;传入子运单后按客户合同乙方=承运商合同甲方匹配并取承运商合同乙方交集
const projectId = this.selectedWaybillRows.map(row => row.projectId).find(Boolean); const projectId = this.selectedWaybillRows.map(row => row.projectId).find(Boolean);
const waybillIds = this.selectedWaybillRows.map(row => row.id).filter(Boolean); const waybillIds = this.selectedWaybillRows.map(row => row.id).filter(Boolean);
const response = await loadingApi.getCarrierContracts( const response = await loadingApi.getCarrierContracts(
+106 -30
View File
@@ -55,7 +55,7 @@
<el-button <el-button
type="warning" type="warning"
plain plain
v-if="!readonlyScope" v-if="!readonlyScope && hcsImmediateEnabled"
:loading="hcsRepushingId === 'batch'" :loading="hcsRepushingId === 'batch'"
@click="handleHcsBatchRepush" @click="handleHcsBatchRepush"
> >
@@ -154,7 +154,7 @@
{{ operation.label }} {{ operation.label }}
</el-link> </el-link>
<el-link <el-link
v-if="canHcsRepush(row)" v-if="hcsImmediateEnabled && canHcsRepush(row)"
type="warning" type="warning"
@click="handleHcsRepush(row)" @click="handleHcsRepush(row)"
> >
@@ -249,35 +249,57 @@
/> />
</el-form-item> </el-form-item>
<el-form-item label="业务部门" prop="businessDeptId"> <el-form-item label="业务部门" prop="businessDeptId">
<el-cascader <el-tooltip
v-model="businessDeptCascaderValue" placement="top"
:options="businessDeptTreeOptions" :disabled="!shouldShowBusinessDeptTooltip"
:props="deptCascaderProps" :show-after="200"
placeholder="请选择" >
filterable <template #content>
clearable <div class="project-apply-form__field-tooltip">{{ businessDeptTooltipText }}</div>
:disabled="dialogReadonly" </template>
/> <span class="project-apply-form__field-tooltip-trigger">
<el-cascader
v-model="businessDeptCascaderValue"
:options="businessDeptTreeOptions"
:props="deptCascaderProps"
placeholder="请选择"
filterable
clearable
:disabled="dialogReadonly"
/>
</span>
</el-tooltip>
</el-form-item> </el-form-item>
<el-form-item label="平台公司" prop="undertakeDeptId"> <el-form-item label="平台公司" prop="undertakeDeptId">
<el-select <el-tooltip
v-model="form.undertakeDeptId" placement="top"
placeholder="请选择" :disabled="!shouldShowUndertakeDeptTooltip"
multiple :show-after="200"
collapse-tags
collapse-tags-tooltip
clearable
filterable
:disabled="dialogReadonly"
@change="handleUndertakeDeptChange"
> >
<el-option <template #content>
v-for="item in platformCompanyOptions" <div class="project-apply-form__field-tooltip">{{ undertakeDeptTooltipText }}</div>
:key="item.value" </template>
:label="item.label" <span class="project-apply-form__field-tooltip-trigger">
:value="item.value" <el-select
/> v-model="form.undertakeDeptId"
</el-select> placeholder="请选择"
multiple
collapse-tags
collapse-tags-tooltip
clearable
filterable
:disabled="dialogReadonly"
@change="handleUndertakeDeptChange"
>
<el-option
v-for="item in platformCompanyOptions"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</span>
</el-tooltip>
</el-form-item> </el-form-item>
<el-form-item label="项目由来" prop="projectSource"> <el-form-item label="项目由来" prop="projectSource">
<el-select <el-select
@@ -962,7 +984,11 @@
import { exportBlob } from '@/api/common'; import { exportBlob } from '@/api/common';
import { defineAsyncComponent } from 'vue'; import { defineAsyncComponent } from 'vue';
import * as api from '@/api/business/project-apply'; import * as api from '@/api/business/project-apply';
import { repush as hcsRepush, repushBatch as hcsRepushBatch } from '@/api/business/hcs'; import {
loadHcsImmediateEnabled,
repush as hcsRepush,
repushBatch as hcsRepushBatch,
} from '@/api/business/hcs';
import { Position } from '@element-plus/icons-vue'; import { Position } from '@element-plus/icons-vue';
import { getMkPublicDetail } from '@/api/mk-process'; import { getMkPublicDetail } from '@/api/mk-process';
import { import {
@@ -1174,8 +1200,9 @@ export default {
{ label: '高风险', value: 'high', statKey: 'high' }, { label: '高风险', value: 'high', statKey: 'high' },
{ label: '中风险', value: 'medium', statKey: 'medium' }, { label: '中风险', value: 'medium', statKey: 'medium' },
], ],
// 合规(HCS)推送状态 // 合规(HCS)推送状态;受 thirdParty.hcs.push.immediate-enabled 控制显隐
hcsRepushingId: null, hcsRepushingId: null,
hcsImmediateEnabled: false,
page: { page: {
pageSize: 10, pageSize: 10,
pageSizes: [10, 20, 50, 100], pageSizes: [10, 20, 50, 100],
@@ -1402,6 +1429,33 @@ export default {
this.handleBusinessDeptChange(this.form.businessDeptId); this.handleBusinessDeptChange(this.form.businessDeptId);
}, },
}, },
// 查看态禁用控件无 hover,用完整路径/名称做 tooltip
businessDeptTooltipText() {
const pathIds = this.businessDeptCascaderValue || [];
if (pathIds.length && this.businessDeptTreeOptions?.length) {
const labels = [];
let nodes = this.businessDeptTreeOptions;
for (const id of pathIds) {
const node = (nodes || []).find(item => String(item.value) === String(id));
if (!node) break;
labels.push(node.label);
nodes = node.children;
}
if (labels.length) return labels.join(' / ');
}
return String(this.form.businessDeptName || '').trim();
},
undertakeDeptTooltipText() {
const name = String(this.form.undertakeDeptName || '').trim();
if (name) return name;
return this.resolveUndertakeDeptNames(this.parseUndertakeDeptIds(this.form.undertakeDeptId));
},
shouldShowBusinessDeptTooltip() {
return this.dialogReadonly && !!this.businessDeptTooltipText;
},
shouldShowUndertakeDeptTooltip() {
return this.dialogReadonly && !!this.undertakeDeptTooltipText;
},
permissionList() { permissionList() {
return { return {
addBtn: this.canCreate, addBtn: this.canCreate,
@@ -1507,6 +1561,13 @@ export default {
.catch(() => { .catch(() => {
this.mkEnabled = false; this.mkEnabled = false;
}); });
loadHcsImmediateEnabled()
.then(enabled => {
this.hcsImmediateEnabled = !!enabled;
})
.catch(() => {
this.hcsImmediateEnabled = false;
});
this.loadDeptOptions(); this.loadDeptOptions();
this.loadCargoTypeOptions(); this.loadCargoTypeOptions();
this.loadTransportTypeOptions(); this.loadTransportTypeOptions();
@@ -1741,6 +1802,7 @@ export default {
}, },
canHcsRepush(row) { canHcsRepush(row) {
return ( return (
this.hcsImmediateEnabled &&
!this.readonlyScope && !this.readonlyScope &&
['approved', 'change_approved'].includes(row.approvalStatus) && ['approved', 'change_approved'].includes(row.approvalStatus) &&
row.hcsSyncStatus !== 'synced' row.hcsSyncStatus !== 'synced'
@@ -3272,6 +3334,20 @@ export default {
width: 100%; width: 100%;
} }
&__field-tooltip-trigger {
display: block;
width: 100%;
}
&__field-tooltip {
max-width: 480px;
max-height: 240px;
overflow: auto;
white-space: pre-wrap;
word-break: break-word;
line-height: 1.5;
}
:deep(.el-form-item) { :deep(.el-form-item) {
//margin-bottom: 24px; //margin-bottom: 24px;
} }
+1 -1
View File
@@ -6,7 +6,7 @@
:config="config" :config="config"
:crud-option="option" :crud-option="option"
:detail-id="detailId" :detail-id="detailId"
:menu-width="250" :menu-width="320"
standalone-form-page standalone-form-page
/> />
</template> </template>
@@ -3260,10 +3260,47 @@ export default {
return files.length ? JSON.stringify(files) : ''; return files.length ? JSON.stringify(files) : '';
}, },
parseFeeItems(value) { parseFeeItems(value) {
const raw = this.parseRawFeeItems(value);
const metaKeys = new Set([
'currency',
'totalFreightAmount',
'otherFreightAmount',
'freightItems',
'freightTotal',
'totalFreight',
'totalAmount',
'freight',
'freightAmount',
'transportFee',
'otherFeeTotal',
'otherAmount',
]);
const result = {};
let otherFeeAmount = 0;
Object.entries(raw).forEach(([key, amount]) => {
if (!key) return;
if (key === 'otherFreightAmount' || key === 'otherFeeTotal' || key === 'otherAmount') {
otherFeeAmount += Number(amount || 0);
return;
}
if (metaKeys.has(key)) return;
if (amount && typeof amount === 'object') return;
result[key] = amount;
});
const hasOtherFee = Object.keys(result).some(
name => String(name).includes('其它费') || String(name).includes('其他费')
);
if (otherFeeAmount && !hasOtherFee) {
result['其它费用'] = otherFeeAmount;
}
return result;
},
parseRawFeeItems(value) {
if (!value) return {}; if (!value) return {};
if (typeof value === 'object') return value; if (typeof value === 'object') return { ...value };
try { try {
return JSON.parse(value); const parsed = JSON.parse(value);
return parsed && typeof parsed === 'object' ? parsed : {};
} catch { } catch {
return {}; return {};
} }
@@ -3061,6 +3061,42 @@ export default {
}); });
}, },
parseFeeItems(value) { parseFeeItems(value) {
const raw = this.parseRawFeeItems(value);
const metaKeys = new Set([
'currency',
'totalFreightAmount',
'otherFreightAmount',
'freightItems',
'freightTotal',
'totalFreight',
'totalAmount',
'freight',
'freightAmount',
'transportFee',
'otherFeeTotal',
'otherAmount',
]);
const result = {};
let otherFeeAmount = 0;
Object.entries(raw).forEach(([key, amount]) => {
if (!key) return;
if (key === 'otherFreightAmount' || key === 'otherFeeTotal' || key === 'otherAmount') {
otherFeeAmount += Number(amount || 0);
return;
}
if (metaKeys.has(key)) return;
if (amount && typeof amount === 'object') return;
result[key] = amount;
});
const hasOtherFee = Object.keys(result).some(
name => String(name).includes('其它费') || String(name).includes('其他费')
);
if (otherFeeAmount && !hasOtherFee) {
result['其它费用'] = otherFeeAmount;
}
return result;
},
parseRawFeeItems(value) {
if (!value) return {}; if (!value) return {};
if (typeof value === 'object') return { ...value }; if (typeof value === 'object') return { ...value };
try { try {
@@ -0,0 +1,42 @@
<template>
<div v-loading="true" class="formal-settlement-redirect" />
</template>
<script>
import * as api from '@/api/settlement/formalSettlement';
import { settlementListPath } from '@/utils/settlement-menu';
/**
* 菜单拆分为付款/收款结算单后,旧路径 /settlement/formal-settlement 已无菜单路由。
* 本页按结算单号解析类型后 replace 到对应列表页,并保留 query(含 detailNo)。
*/
export default {
name: 'FormalSettlementRedirect',
async created() {
const detailNo = String(this.$route.query.detailNo || '').trim();
let settlementType = '';
if (detailNo) {
try {
const response = await api.getList(1, 10, { formalSettlementNo: detailNo });
const body = response?.data || response || {};
const data = body?.data || body;
const row = (data.records || []).find(item => item.formalSettlementNo === detailNo);
settlementType = row?.settlementType || '';
} catch (error) {
settlementType = '';
}
}
const path = settlementListPath(settlementType);
await this.$router.replace({
path,
query: { ...this.$route.query },
});
},
};
</script>
<style scoped>
.formal-settlement-redirect {
min-height: 240px;
}
</style>
+24 -3
View File
@@ -152,6 +152,8 @@ export default {
form: { appliedAmount: 0, remark: '' }, form: { appliedAmount: 0, remark: '' },
}, },
mkEnabled: false, mkEnabled: false,
// keep-alive 多标签下仅激活实例响应 detailNo,避免缓存页重复弹窗
isPageActive: true,
}; };
}, },
computed: { computed: {
@@ -222,11 +224,10 @@ export default {
}, },
}, },
created() { created() {
// 标签机制按 fullPath 缓存同页多实例:仅当前路由实例应响应 detailNo 跳转,防止缓存旧实例也弹窗
this.ownFullPath = this.$route.fullPath;
this.loadOrganizationOptions(); this.loadOrganizationOptions();
}, },
mounted() { mounted() {
this.isPageActive = true;
this.openRouteDetail(); this.openRouteDetail();
loadMkEnabled() loadMkEnabled()
.then(enabled => { .then(enabled => {
@@ -237,10 +238,18 @@ export default {
}); });
}, },
activated() { activated() {
this.isPageActive = true;
if (sessionStorage.getItem('formal-settlement-list-refresh') === '1') { if (sessionStorage.getItem('formal-settlement-list-refresh') === '1') {
sessionStorage.removeItem('formal-settlement-list-refresh'); sessionStorage.removeItem('formal-settlement-list-refresh');
this.onLoad(this.page); this.onLoad(this.page);
} }
// 从其他页带 detailNo 跳回时,激活态补开详情
if (this.$route.query.detailNo) {
this.openRouteDetail();
}
},
deactivated() {
this.isPageActive = false;
}, },
methods: { methods: {
hasPermission(actionOrCode) { hasPermission(actionOrCode) {
@@ -320,7 +329,7 @@ export default {
}, },
async openRouteDetail(detailNo = this.$route.query.detailNo) { async openRouteDetail(detailNo = this.$route.query.detailNo) {
const formalSettlementNo = String(detailNo || '').trim(); const formalSettlementNo = String(detailNo || '').trim();
if (!formalSettlementNo || this.ownFullPath !== this.$route.fullPath) return; if (!formalSettlementNo || !this.isPageActive) return;
const response = await api.getList(1, 10, { formalSettlementNo }); const response = await api.getList(1, 10, { formalSettlementNo });
const data = this.unwrapData(response); const data = this.unwrapData(response);
const row = (data.records || []).find(item => item.formalSettlementNo === formalSettlementNo); const row = (data.records || []).find(item => item.formalSettlementNo === formalSettlementNo);
@@ -328,6 +337,18 @@ export default {
this.$message.warning(`未找到对应的${this.billLabel}`); this.$message.warning(`未找到对应的${this.billLabel}`);
return; return;
} }
// 锁定菜单(付款/收款)下若单号属于另一类型,跳到对应列表页再打开
if (
this.lockedSettlementType &&
row.settlementType &&
row.settlementType !== this.lockedSettlementType
) {
await this.$router.replace({
path: settlementListPath(row.settlementType),
query: { detailNo: formalSettlementNo },
});
return;
}
if (!this.lockedSettlementType) { if (!this.lockedSettlementType) {
this.activeSettlementType = row.settlementType || this.activeSettlementType; this.activeSettlementType = row.settlementType || this.activeSettlementType;
} }
@@ -1914,7 +1914,7 @@ export default {
return; return;
} }
if (this.settlementType === 'payable' && column.prop === 'formalSettlementNo') { if (this.settlementType === 'payable' && column.prop === 'formalSettlementNo') {
this.openSettlementDetail('/settlement/formal-settlement', row.formalSettlementNo); this.openSettlementDetail('/settlement/payment-settlement', row.formalSettlementNo);
return; return;
} }
this.openDetailDialog(row); this.openDetailDialog(row);
@@ -190,6 +190,7 @@ import { kingdeeStatusType } from '@/utils/kingdee';
import SettlementAdjustmentEditor from './components/settlement-adjustment-editor.vue'; import SettlementAdjustmentEditor from './components/settlement-adjustment-editor.vue';
import SettlementTableTools from './components/settlement-table-tools.vue'; import SettlementTableTools from './components/settlement-table-tools.vue';
import { isAdministrator } from '@/utils/auth'; import { isAdministrator } from '@/utils/auth';
import { settlementListPath } from '@/utils/settlement-menu';
const emptyQuery = () => ({ const emptyQuery = () => ({
adjustmentNo: '', adjustmentNo: '',
@@ -290,20 +291,23 @@ export default {
openView(row) { openView(row) {
this.editor = { visible: true, id: row.id, readonly: true }; this.editor = { visible: true, id: row.id, readonly: true };
}, },
// 单据号→本单查看弹窗;结算单号→跳正式结算列表页并自动打开该单详情(页面支持 ?detailNo=) // 单据号→本单查看弹窗;结算单号→跳付款/收款结算列表页并自动打开该单详情(页面支持 ?detailNo=)
handleTableLink(row, column) { handleTableLink(row, column) {
if (column.prop === 'formalSettlementNo') { if (column.prop === 'formalSettlementNo') {
this.openSettlementDetail(row.formalSettlementNo); this.openSettlementDetail(row.formalSettlementNo, row.settlementType);
return; return;
} }
this.openView(row); this.openView(row);
}, },
openSettlementDetail(detailNo) { openSettlementDetail(detailNo, settlementType) {
if (!detailNo) { if (!detailNo) {
this.$message.info('当前记录未关联结算单详情'); this.$message.info('当前记录未关联结算单详情');
return; return;
} }
this.$router.push({ path: '/settlement/formal-settlement', query: { detailNo } }); this.$router.push({
path: settlementListPath(settlementType),
query: { detailNo },
});
}, },
isEditable(row) { isEditable(row) {
return ['draft', 'returned'].includes(row.approvalStatus); return ['draft', 'returned'].includes(row.approvalStatus);
+112 -18
View File
@@ -303,6 +303,42 @@
/> />
</el-col> </el-col>
</el-row> </el-row>
<el-row :gutter="18">
<el-col :span="6">
<el-form-item label="身份证有效期" prop="idCardValidEnd">
<div class="date-range">
<el-date-picker
v-model="driverForm.idCardValidStart"
type="date"
value-format="YYYY-MM-DD"
placeholder="起"
:disabled="driverForm.idCardLongTerm === 1"
@change="validateFormField('idCardValidEnd')"
/>
<el-date-picker
v-model="driverForm.idCardValidEnd"
type="date"
value-format="YYYY-MM-DD"
placeholder="止"
:disabled="driverForm.idCardLongTerm === 1"
@change="validateFormField('idCardValidEnd')"
/>
</div>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="长期有效" prop="idCardLongTerm">
<el-checkbox
v-model="driverForm.idCardLongTerm"
:true-label="1"
:false-label="0"
@change="handleIdCardLongTermChange"
>
是
</el-checkbox>
</el-form-item>
</el-col>
</el-row>
</section-card> </section-card>
<section-card title="驾驶证信息"> <section-card title="驾驶证信息">
@@ -701,6 +737,9 @@ const emptyForm = () => ({
posts: '', posts: '',
idCardFront: '', idCardFront: '',
idCardBack: '', idCardBack: '',
idCardValidStart: '',
idCardValidEnd: '',
idCardLongTerm: 0,
headPhoto: '', headPhoto: '',
drivingType: '', drivingType: '',
drivingLicenseNo: '', drivingLicenseNo: '',
@@ -1260,12 +1299,13 @@ export default {
}, },
handleIdCardUploadSuccess(prop, url) { handleIdCardUploadSuccess(prop, url) {
this.setImage(prop, url); this.setImage(prop, url);
if (prop !== 'idCardFront') { this.recognizeIdCard(url, prop);
return; },
handleIdCardLongTermChange() {
if (this.driverForm.idCardLongTerm === 1) {
this.driverForm.idCardValidEnd = '';
} }
this.recognizeBaiduOcr(url, 'id_card', 'front', '身份证', data => { this.validateFormField('idCardValidEnd');
this.applyIdCardRecognition(data);
});
}, },
handleDrivingLicenseUploadSuccess(prop, url) { handleDrivingLicenseUploadSuccess(prop, url) {
this.setImage(prop, url); this.setImage(prop, url);
@@ -1308,7 +1348,7 @@ export default {
loading.close(); loading.close();
}); });
}, },
recognizeIdCard(url = '') { recognizeIdCard(url = '', prop = 'idCardFront') {
if (!url) { if (!url) {
this.$message.warning('身份证图片上传成功,未获取到图片地址,无法自动识别'); this.$message.warning('身份证图片上传成功,未获取到图片地址,无法自动识别');
return; return;
@@ -1321,7 +1361,7 @@ export default {
recognitionIDCard(url) recognitionIDCard(url)
.then(res => { .then(res => {
const data = res.data.data || {}; const data = res.data.data || {};
this.applyIdCardRecognition(data); this.applyIdCardRecognition(data, prop);
this.$message.success('身份证识别完成'); this.$message.success('身份证识别完成');
}) })
.catch(() => { .catch(() => {
@@ -1444,45 +1484,62 @@ export default {
this.driverForm.drivingLicenseLongTerm = 0; this.driverForm.drivingLicenseLongTerm = 0;
} }
}, },
applyIdCardRecognition(data = {}) { applyIdCardRecognition(data = {}, prop = 'idCardFront') {
// 正反面都走同一 ShenFenZheng 接口;反面结果可能也带姓名/民族等字段,
// 反面只补空、不覆盖正面已填值,避免国徽页误识别冲掉正面信息。
const fromBack = prop === 'idCardBack';
const canWrite = (current, next) => !!next && (!fromBack || !current);
const driverName = data.name || data.driverName || this.getOcrValue(data, ['name', '姓名']); const driverName = data.name || data.driverName || this.getOcrValue(data, ['name', '姓名']);
const idCardNo = String( const idCardNo = String(
data.idNo || data.idNo ||
data.idCardNo || data.idCardNo ||
data.idCard || data.idCard ||
this.getOcrValue(data, ['idNo', 'idCardNo', 'number', '公民身份号码', '身份证号']) this.getOcrValue(data, ['idNo', 'idCardNo', 'number', '公民身份号码', '身份证号']) ||
).toUpperCase(); ''
)
.trim()
.toUpperCase();
const ocrGender = data.gender || this.getOcrValue(data, ['gender', '性别']); const ocrGender = data.gender || this.getOcrValue(data, ['gender', '性别']);
const ocrNation = const ocrNation =
data.nation || data.nation ||
data.ethnicGroup || data.ethnicGroup ||
this.getOcrValue(data, ['ethnic_group', 'nation', '民族']); this.getOcrValue(data, ['ethnic_group', 'nation', '民族']);
const ocrAddress = data.address || this.getOcrValue(data, ['address', '住址', '地址']); const ocrAddress = data.address || this.getOcrValue(data, ['address', '住址', '地址']);
if (driverName) { const ocrBirthday =
data.birthday || this.getOcrValue(data, ['birthday', '出生', '出生年月', '出生日期']);
if (canWrite(this.driverForm.driverName, driverName)) {
this.driverForm.driverName = driverName; this.driverForm.driverName = driverName;
} }
if (ocrGender) { if (canWrite(this.driverForm.gender, ocrGender)) {
this.driverForm.gender = ocrGender; this.driverForm.gender = ocrGender;
} }
if (ocrNation) { if (canWrite(this.driverForm.nation, ocrNation)) {
this.driverForm.nation = this.normalizeNation(ocrNation); this.driverForm.nation = this.normalizeNation(ocrNation);
} }
if (ocrAddress) { if (canWrite(this.driverForm.address, ocrAddress)) {
this.driverForm.address = String(ocrAddress).trim(); this.driverForm.address = String(ocrAddress).trim();
} }
if (idCardNo) { if (ocrBirthday) {
const birthday = this.normalizeBirthday(ocrBirthday);
if (canWrite(this.driverForm.birthday, birthday)) {
this.driverForm.birthday = birthday;
}
}
if (idCardNo && canWrite(this.driverForm.idCardNo, idCardNo)) {
this.driverForm.idCardNo = idCardNo; this.driverForm.idCardNo = idCardNo;
if (!this.driverForm.qualificationNo) { if (!this.driverForm.qualificationNo) {
this.driverForm.qualificationNo = idCardNo; this.driverForm.qualificationNo = idCardNo;
} }
const idCardInfo = this.parseIdCardInfo(idCardNo); const idCardInfo = this.parseIdCardInfo(idCardNo);
if (idCardInfo.birthday) { if (!this.driverForm.birthday && idCardInfo.birthday) {
this.driverForm.birthday = idCardInfo.birthday; this.driverForm.birthday = idCardInfo.birthday;
} }
if (!this.driverForm.gender && idCardInfo.gender) { if (!this.driverForm.gender && idCardInfo.gender) {
this.driverForm.gender = idCardInfo.gender; this.driverForm.gender = idCardInfo.gender;
} }
} }
// 有效期:正反面都可回填;反面通常才有,识别到就覆盖
this.applyIdCardValidity(data);
this.$nextTick(() => { this.$nextTick(() => {
[ [
'driverName', 'driverName',
@@ -1492,11 +1549,46 @@ export default {
'nation', 'nation',
'qualificationNo', 'qualificationNo',
'address', 'address',
].forEach(prop => { 'idCardValidEnd',
this.$refs.driverForm?.validateField(prop); ].forEach(field => {
this.$refs.driverForm?.validateField(field);
}); });
}); });
}, },
applyIdCardValidity(data = {}) {
const validStart =
data.validDateStart ||
data.idCardValidStart ||
this.getOcrValue(data, ['签发日期', '有效起始日期', '有效期限起', '身份证_签发日期']);
const validEndRaw =
data.validDateEnd ||
data.idCardValidEnd ||
this.getOcrValue(data, [
'失效日期',
'有效期限',
'有效期限止',
'身份证_有效期限',
'身份证_失效日期',
]);
const longTerm = data.longTerm ?? data.idCardLongTerm;
const validEndText = String(validEndRaw || '').trim();
if (longTerm === 1 || longTerm === '1' || /长期|永久/.test(validEndText)) {
this.driverForm.idCardLongTerm = 1;
this.driverForm.idCardValidEnd = '';
} else if (validEndText) {
const endDate = this.normalizeBirthday(validEndText);
if (endDate) {
this.driverForm.idCardValidEnd = endDate;
this.driverForm.idCardLongTerm = 0;
}
}
if (validStart) {
const startDate = this.normalizeBirthday(validStart);
if (startDate) {
this.driverForm.idCardValidStart = startDate;
}
}
},
getOcrValue(data = {}, keys = []) { getOcrValue(data = {}, keys = []) {
const keyInfos = data.keyInfos || data.keyInfo || data.ocrKeyInfos || []; const keyInfos = data.keyInfos || data.keyInfo || data.ocrKeyInfos || [];
const list = Array.isArray(keyInfos) ? keyInfos : []; const list = Array.isArray(keyInfos) ? keyInfos : [];
@@ -1675,6 +1767,8 @@ export default {
const row = { const row = {
...this.driverForm, ...this.driverForm,
birthday: this.normalizeBirthday(this.driverForm.birthday), birthday: this.normalizeBirthday(this.driverForm.birthday),
idCardValidStart: this.normalizeBirthday(this.driverForm.idCardValidStart),
idCardValidEnd: this.normalizeBirthday(this.driverForm.idCardValidEnd),
drivingLicenseStartDate: this.normalizeBirthday(this.driverForm.drivingLicenseStartDate), drivingLicenseStartDate: this.normalizeBirthday(this.driverForm.drivingLicenseStartDate),
drivingLicenseEndDate: this.normalizeBirthday(this.driverForm.drivingLicenseEndDate), drivingLicenseEndDate: this.normalizeBirthday(this.driverForm.drivingLicenseEndDate),
qualificationStartDate: this.normalizeBirthday(this.driverForm.qualificationStartDate), qualificationStartDate: this.normalizeBirthday(this.driverForm.qualificationStartDate),
+25
View File
@@ -179,6 +179,14 @@ const createTimeRangeMap = {
createTimeRange: ['createTimeStart', 'createTimeEnd'], createTimeRange: ['createTimeStart', 'createTimeEnd'],
}; };
/** 关联异常列:一级 / 二级(如「车辆异常 / 车辆故障维修」),无关联显示 — */
function formatExceptionSource(row) {
const parts = [row?.exceptionType, row?.exceptionReason].filter(
item => item !== undefined && item !== null && String(item).trim() !== ''
);
return parts.length ? parts.join(' / ') : '—';
}
const exportColumns = [ const exportColumns = [
{ prop: 'vehicleType', label: '车船类型' }, { prop: 'vehicleType', label: '车船类型' },
{ prop: 'vehicleNo', label: '车牌号/船号' }, { prop: 'vehicleNo', label: '车牌号/船号' },
@@ -284,6 +292,23 @@ export default {
{ max: 30, message: '最多 30 个字符', trigger: 'change' }, { max: 30, message: '最多 30 个字符', trigger: 'change' },
], ],
}, },
// 关联信息只读展示:由异常处置录入的记录带出运单与异常类型,PC 新增/编辑不产生关联
{
label: '关联运单',
prop: 'waybillNo',
minWidth: 150,
addDisplay: false,
editDisplay: false,
formatter: row => row.waybillNo || '—',
},
{
label: '关联异常',
prop: 'exceptionReason',
minWidth: 180,
addDisplay: false,
editDisplay: false,
formatter: formatExceptionSource,
},
{ {
label: '维修人', label: '维修人',
prop: 'maintainer', prop: 'maintainer',