✨ 优化港口地图回填、合同展示与运单导入空值

地图选点回填国家省市区;合同选择显示编号/名称;常用数据组织筛选修正;运单详情将-1费用字段显示为空。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-10-09 17:07:56 +08:00
parent 570fbeb537
commit a1da644c49
25 changed files with 568 additions and 217 deletions
+41 -72
View File
@@ -4,9 +4,6 @@ settings:
autoInstallPeers: true autoInstallPeers: true
excludeLinksFromLockfile: false excludeLinksFromLockfile: false
patchedDependencies:
'@smallwei/avue': 5ba15ad41b2c301250bf24adf39da2ed526b8375143da2c5a495361b29e862db
importers: importers:
.: .:
@@ -31,16 +28,16 @@ importers:
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))(debug@4.4.3(supports-color@7.2.0))(element-plus@2.14.2(vue@3.5.34))(vue@3.5.34) version: 3.9.2(@element-plus/icons-vue@2.3.2(vue@3.5.34))(element-plus@2.14.2(vue@3.5.34))(vue@3.5.34)
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) version: 1.0.4(axios@1.16.0)(vue@3.5.34)
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
codemirror: codemirror:
specifier: ^5.65.21 specifier: ^5.65.21
version: 5.65.21 version: 5.65.21
@@ -128,7 +125,7 @@ importers:
version: 5.4.21(sass@1.99.0)(terser@5.46.2) version: 5.4.21(sass@1.99.0)(terser@5.46.2)
vite-plugin-compression: vite-plugin-compression:
specifier: ^0.5.1 specifier: ^0.5.1
version: 0.5.1(supports-color@7.2.0)(vite@5.4.21(sass@1.99.0)(terser@5.46.2)) version: 0.5.1(vite@5.4.21(sass@1.99.0)(terser@5.46.2))
vite-plugin-vue-setup-extend: vite-plugin-vue-setup-extend:
specifier: ^0.4.0 specifier: ^0.4.0
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))
@@ -407,35 +404,30 @@ packages:
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
libc: [glibc]
'@napi-rs/canvas-linux-arm64-musl@1.0.2': '@napi-rs/canvas-linux-arm64-musl@1.0.2':
resolution: {integrity: sha512-qwROoDIC9upfvDoRLuPn2aNg9CGW1x0Ygr4k2Or+8paA9d0qBLwk87U+g8KQpoOviKoPoiwl97kvBYuYD7qZoA==} resolution: {integrity: sha512-qwROoDIC9upfvDoRLuPn2aNg9CGW1x0Ygr4k2Or+8paA9d0qBLwk87U+g8KQpoOviKoPoiwl97kvBYuYD7qZoA==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
libc: [musl]
'@napi-rs/canvas-linux-riscv64-gnu@1.0.2': '@napi-rs/canvas-linux-riscv64-gnu@1.0.2':
resolution: {integrity: sha512-fXRjnPihdnbO6qy1QQOgxAonb68A0TCEG7rj1x7v7rxNElsE8EVIKIEUTvyDtU+sthYSbX+8e7g3oZiLGnOmxw==} resolution: {integrity: sha512-fXRjnPihdnbO6qy1QQOgxAonb68A0TCEG7rj1x7v7rxNElsE8EVIKIEUTvyDtU+sthYSbX+8e7g3oZiLGnOmxw==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [riscv64] cpu: [riscv64]
os: [linux] os: [linux]
libc: [glibc]
'@napi-rs/canvas-linux-x64-gnu@1.0.2': '@napi-rs/canvas-linux-x64-gnu@1.0.2':
resolution: {integrity: sha512-nPR97DXhbWIAy7yazF3jc06kEPMqYMLmPzFOVNlwKPfIoSChnI+x7dc0hTLaihz3jxrjL6j4BbA7earxfx4X3g==} resolution: {integrity: sha512-nPR97DXhbWIAy7yazF3jc06kEPMqYMLmPzFOVNlwKPfIoSChnI+x7dc0hTLaihz3jxrjL6j4BbA7earxfx4X3g==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
libc: [glibc]
'@napi-rs/canvas-linux-x64-musl@1.0.2': '@napi-rs/canvas-linux-x64-musl@1.0.2':
resolution: {integrity: sha512-l7zZY5+jL5qnBZtDz7CoBtY6p7EkHu422g/0zWwrOrzIwWyWxZFRfZZORY1UG7YApymPLx+UbOkN206xXn/c1Q==} resolution: {integrity: sha512-l7zZY5+jL5qnBZtDz7CoBtY6p7EkHu422g/0zWwrOrzIwWyWxZFRfZZORY1UG7YApymPLx+UbOkN206xXn/c1Q==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
libc: [musl]
'@napi-rs/canvas-win32-arm64-msvc@1.0.2': '@napi-rs/canvas-win32-arm64-msvc@1.0.2':
resolution: {integrity: sha512-yE0koHCFF4PIbMc2o2SEALhnipz7WBISh5glLvQiomtIoCcW0np3H4Lw93ceJAfJttTTeIIWFbwH84F7EVzjMQ==} resolution: {integrity: sha512-yE0koHCFF4PIbMc2o2SEALhnipz7WBISh5glLvQiomtIoCcW0np3H4Lw93ceJAfJttTTeIIWFbwH84F7EVzjMQ==}
@@ -511,42 +503,36 @@ packages:
engines: {node: '>= 10.0.0'} engines: {node: '>= 10.0.0'}
cpu: [arm] cpu: [arm]
os: [linux] os: [linux]
libc: [glibc]
'@parcel/watcher-linux-arm-musl@2.5.6': '@parcel/watcher-linux-arm-musl@2.5.6':
resolution: {integrity: sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==} resolution: {integrity: sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==}
engines: {node: '>= 10.0.0'} engines: {node: '>= 10.0.0'}
cpu: [arm] cpu: [arm]
os: [linux] os: [linux]
libc: [musl]
'@parcel/watcher-linux-arm64-glibc@2.5.6': '@parcel/watcher-linux-arm64-glibc@2.5.6':
resolution: {integrity: sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==} resolution: {integrity: sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==}
engines: {node: '>= 10.0.0'} engines: {node: '>= 10.0.0'}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
libc: [glibc]
'@parcel/watcher-linux-arm64-musl@2.5.6': '@parcel/watcher-linux-arm64-musl@2.5.6':
resolution: {integrity: sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==} resolution: {integrity: sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==}
engines: {node: '>= 10.0.0'} engines: {node: '>= 10.0.0'}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
libc: [musl]
'@parcel/watcher-linux-x64-glibc@2.5.6': '@parcel/watcher-linux-x64-glibc@2.5.6':
resolution: {integrity: sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==} resolution: {integrity: sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==}
engines: {node: '>= 10.0.0'} engines: {node: '>= 10.0.0'}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
libc: [glibc]
'@parcel/watcher-linux-x64-musl@2.5.6': '@parcel/watcher-linux-x64-musl@2.5.6':
resolution: {integrity: sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==} resolution: {integrity: sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==}
engines: {node: '>= 10.0.0'} engines: {node: '>= 10.0.0'}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
libc: [musl]
'@parcel/watcher-win32-arm64@2.5.6': '@parcel/watcher-win32-arm64@2.5.6':
resolution: {integrity: sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==} resolution: {integrity: sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==}
@@ -613,79 +599,66 @@ packages:
resolution: {integrity: sha512-DV6fJoxEYWJOvaZIsok7KrYl0tPvga5OZ2yvKHNNYyk/2roMLqQAbGhr78EQ5YhHpnhLKJD3S1WFusAkmUuV5g==} resolution: {integrity: sha512-DV6fJoxEYWJOvaZIsok7KrYl0tPvga5OZ2yvKHNNYyk/2roMLqQAbGhr78EQ5YhHpnhLKJD3S1WFusAkmUuV5g==}
cpu: [arm] cpu: [arm]
os: [linux] os: [linux]
libc: [glibc]
'@rollup/rollup-linux-arm-musleabihf@4.60.3': '@rollup/rollup-linux-arm-musleabihf@4.60.3':
resolution: {integrity: sha512-mQKoJAzvuOs6F+TZybQO4GOTSMUu7v0WdxEk24krQ/uUxXoPTtHjuaUuPmFhtBcM4K0ons8nrE3JyhTuCFtT/w==} resolution: {integrity: sha512-mQKoJAzvuOs6F+TZybQO4GOTSMUu7v0WdxEk24krQ/uUxXoPTtHjuaUuPmFhtBcM4K0ons8nrE3JyhTuCFtT/w==}
cpu: [arm] cpu: [arm]
os: [linux] os: [linux]
libc: [musl]
'@rollup/rollup-linux-arm64-gnu@4.60.3': '@rollup/rollup-linux-arm64-gnu@4.60.3':
resolution: {integrity: sha512-Whjj2qoiJ6+OOJMGptTYazaJvjOJm+iKHpXQM1P3LzGjt7Ff++Tp7nH4N8J/BUA7R9IHfDyx4DJIflifwnbmIA==} resolution: {integrity: sha512-Whjj2qoiJ6+OOJMGptTYazaJvjOJm+iKHpXQM1P3LzGjt7Ff++Tp7nH4N8J/BUA7R9IHfDyx4DJIflifwnbmIA==}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
libc: [glibc]
'@rollup/rollup-linux-arm64-musl@4.60.3': '@rollup/rollup-linux-arm64-musl@4.60.3':
resolution: {integrity: sha512-4YTNHKqGng5+yiZt3mg77nmyuCfmNfX4fPmyUapBcIk+BdwSwmCWGXOUxhXbBEkFHtoN5boLj/5NON+u5QC9tg==} resolution: {integrity: sha512-4YTNHKqGng5+yiZt3mg77nmyuCfmNfX4fPmyUapBcIk+BdwSwmCWGXOUxhXbBEkFHtoN5boLj/5NON+u5QC9tg==}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
libc: [musl]
'@rollup/rollup-linux-loong64-gnu@4.60.3': '@rollup/rollup-linux-loong64-gnu@4.60.3':
resolution: {integrity: sha512-SU3kNlhkpI4UqlUc2VXPGK9o886ZsSeGfMAX2ba2b8DKmMXq4AL7KUrkSWVbb7koVqx41Yczx6dx5PNargIrEA==} resolution: {integrity: sha512-SU3kNlhkpI4UqlUc2VXPGK9o886ZsSeGfMAX2ba2b8DKmMXq4AL7KUrkSWVbb7koVqx41Yczx6dx5PNargIrEA==}
cpu: [loong64] cpu: [loong64]
os: [linux] os: [linux]
libc: [glibc]
'@rollup/rollup-linux-loong64-musl@4.60.3': '@rollup/rollup-linux-loong64-musl@4.60.3':
resolution: {integrity: sha512-6lDLl5h4TXpB1mTf2rQWnAk/LcXrx9vBfu/DT5TIPhvMhRWaZ5MxkIc8u4lJAmBo6klTe1ywXIUHFjylW505sg==} resolution: {integrity: sha512-6lDLl5h4TXpB1mTf2rQWnAk/LcXrx9vBfu/DT5TIPhvMhRWaZ5MxkIc8u4lJAmBo6klTe1ywXIUHFjylW505sg==}
cpu: [loong64] cpu: [loong64]
os: [linux] os: [linux]
libc: [musl]
'@rollup/rollup-linux-ppc64-gnu@4.60.3': '@rollup/rollup-linux-ppc64-gnu@4.60.3':
resolution: {integrity: sha512-BMo8bOw8evlup/8G+cj5xWtPyp93xPdyoSN16Zy90Q2QZ0ZYRhCt6ZJSwbrRzG9HApFabjwj2p25TUPDWrhzqQ==} resolution: {integrity: sha512-BMo8bOw8evlup/8G+cj5xWtPyp93xPdyoSN16Zy90Q2QZ0ZYRhCt6ZJSwbrRzG9HApFabjwj2p25TUPDWrhzqQ==}
cpu: [ppc64] cpu: [ppc64]
os: [linux] os: [linux]
libc: [glibc]
'@rollup/rollup-linux-ppc64-musl@4.60.3': '@rollup/rollup-linux-ppc64-musl@4.60.3':
resolution: {integrity: sha512-E0L8X1dZN1/Rph+5VPF6Xj2G7JJvMACVXtamTJIDrVI44Y3K+G8gQaMEAavbqCGTa16InptiVrX6eM6pmJ+7qA==} resolution: {integrity: sha512-E0L8X1dZN1/Rph+5VPF6Xj2G7JJvMACVXtamTJIDrVI44Y3K+G8gQaMEAavbqCGTa16InptiVrX6eM6pmJ+7qA==}
cpu: [ppc64] cpu: [ppc64]
os: [linux] os: [linux]
libc: [musl]
'@rollup/rollup-linux-riscv64-gnu@4.60.3': '@rollup/rollup-linux-riscv64-gnu@4.60.3':
resolution: {integrity: sha512-oZJ/WHaVfHUiRAtmTAeo3DcevNsVvH8mbvodjZy7D5QKvCefO371SiKRpxoDcCxB3PTRTLayWBkvmDQKTcX/sw==} resolution: {integrity: sha512-oZJ/WHaVfHUiRAtmTAeo3DcevNsVvH8mbvodjZy7D5QKvCefO371SiKRpxoDcCxB3PTRTLayWBkvmDQKTcX/sw==}
cpu: [riscv64] cpu: [riscv64]
os: [linux] os: [linux]
libc: [glibc]
'@rollup/rollup-linux-riscv64-musl@4.60.3': '@rollup/rollup-linux-riscv64-musl@4.60.3':
resolution: {integrity: sha512-Dhbyh7j9FybM3YaTgaHmVALwA8AkUwTPccyCQ79TG9AJUsMQqgN1DDEZNr4+QUfwiWvLDumW5vdwzoeUF+TNxQ==} resolution: {integrity: sha512-Dhbyh7j9FybM3YaTgaHmVALwA8AkUwTPccyCQ79TG9AJUsMQqgN1DDEZNr4+QUfwiWvLDumW5vdwzoeUF+TNxQ==}
cpu: [riscv64] cpu: [riscv64]
os: [linux] os: [linux]
libc: [musl]
'@rollup/rollup-linux-s390x-gnu@4.60.3': '@rollup/rollup-linux-s390x-gnu@4.60.3':
resolution: {integrity: sha512-cJd1X5XhHHlltkaypz1UcWLA8AcoIi1aWhsvaWDskD1oz2eKCypnqvTQ8ykMNI0RSmm7NkTdSqSSD7zM0xa6Ig==} resolution: {integrity: sha512-cJd1X5XhHHlltkaypz1UcWLA8AcoIi1aWhsvaWDskD1oz2eKCypnqvTQ8ykMNI0RSmm7NkTdSqSSD7zM0xa6Ig==}
cpu: [s390x] cpu: [s390x]
os: [linux] os: [linux]
libc: [glibc]
'@rollup/rollup-linux-x64-gnu@4.60.3': '@rollup/rollup-linux-x64-gnu@4.60.3':
resolution: {integrity: sha512-DAZDBHQfG2oQuhY7mc6I3/qB4LU2fQCjRvxbDwd/Jdvb9fypP4IJ4qmtu6lNjes6B531AI8cg1aKC2di97bUxA==} resolution: {integrity: sha512-DAZDBHQfG2oQuhY7mc6I3/qB4LU2fQCjRvxbDwd/Jdvb9fypP4IJ4qmtu6lNjes6B531AI8cg1aKC2di97bUxA==}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
libc: [glibc]
'@rollup/rollup-linux-x64-musl@4.60.3': '@rollup/rollup-linux-x64-musl@4.60.3':
resolution: {integrity: sha512-cRxsE8c13mZOh3vP+wLDxpQBRrOHDIGOWyDL93Sy0Ga8y515fBcC2pjUfFwUe5T7tqvTvWbCpg1URM/AXdWIXA==} resolution: {integrity: sha512-cRxsE8c13mZOh3vP+wLDxpQBRrOHDIGOWyDL93Sy0Ga8y515fBcC2pjUfFwUe5T7tqvTvWbCpg1URM/AXdWIXA==}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
libc: [musl]
'@rollup/rollup-openbsd-x64@4.60.3': '@rollup/rollup-openbsd-x64@4.60.3':
resolution: {integrity: sha512-QaWcIgRxqEdQdhJqW4DJctsH6HCmo5vHxY0krHSX4jMtOqfzC+dqDGuHM87bu4H8JBeibWx7jFz+h6/4C8wA5Q==} resolution: {integrity: sha512-QaWcIgRxqEdQdhJqW4DJctsH6HCmo5vHxY0krHSX4jMtOqfzC+dqDGuHM87bu4H8JBeibWx7jFz+h6/4C8wA5Q==}
@@ -2654,10 +2627,10 @@ 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))(debug@4.4.3(supports-color@7.2.0))(element-plus@2.14.2(vue@3.5.34))(vue@3.5.34)': '@smallwei/avue@3.9.2(@element-plus/icons-vue@2.3.2(vue@3.5.34))(element-plus@2.14.2(vue@3.5.34))(vue@3.5.34)':
dependencies: dependencies:
'@element-plus/icons-vue': 2.3.2(vue@3.5.34) '@element-plus/icons-vue': 2.3.2(vue@3.5.34)
axios: 0.21.4(debug@4.4.3(supports-color@7.2.0)) axios: 0.21.4
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) element-plus: 2.14.2(vue@3.5.34)
@@ -2793,25 +2766,25 @@ snapshots:
dependencies: dependencies:
vue: 3.5.34 vue: 3.5.34
'@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@3.0.0)(lodash.throttle@4.1.1)(nanoid@3.3.12)(slate@0.72.8)(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@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@3.3.12)(slate@0.72.8)(snabbdom@3.6.3)
dom7: 3.0.0 dom7: 3.0.0
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: 3.3.12
slate: 0.123.0 slate: 0.72.8
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@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@3.3.12)(slate@0.72.8)(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@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@3.3.12)(slate@0.72.8)(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
@@ -2827,9 +2800,9 @@ snapshots:
lodash.foreach: 4.5.0 lodash.foreach: 4.5.0
lodash.throttle: 4.1.1 lodash.throttle: 4.1.1
lodash.toarray: 4.4.0 lodash.toarray: 4.4.0
nanoid: 5.1.11 nanoid: 3.3.12
scroll-into-view-if-needed: 3.1.0 scroll-into-view-if-needed: 3.1.0
slate: 0.123.0 slate: 0.72.8
slate-history: 0.115.0(slate@0.123.0) slate-history: 0.115.0(slate@0.123.0)
snabbdom: 3.6.3 snabbdom: 3.6.3
@@ -2837,13 +2810,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@3.0.0)(lodash.throttle@4.1.1)(nanoid@3.3.12)(slate@0.72.8)(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@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@3.3.12)(slate@0.72.8)(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
@@ -2856,16 +2829,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@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@3.3.12)(slate@0.72.8)(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@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@3.3.12)(slate@0.72.8)(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
@@ -2873,22 +2846,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@3.0.0)(lodash.throttle@4.1.1)(nanoid@3.3.12)(slate@0.72.8)(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@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@3.3.12)(slate@0.72.8)(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@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@3.3.12)(slate@0.72.8)(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
@@ -3065,22 +3038,22 @@ 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): avue-plugin-ueditor@1.0.4(axios@1.16.0)(vue@3.5.34):
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) '@wangeditor/editor-for-vue': 5.1.12(@wangeditor/editor@5.1.23)(vue@3.5.34)
axios: 1.16.0(debug@4.4.3(supports-color@7.2.0)) axios: 1.16.0
vue: 3.5.34 vue: 3.5.34
axios@0.21.4(debug@4.4.3(supports-color@7.2.0)): axios@0.21.4:
dependencies: dependencies:
follow-redirects: 1.16.0(debug@4.4.3(supports-color@7.2.0)) follow-redirects: 1.16.0
transitivePeerDependencies: transitivePeerDependencies:
- debug - debug
axios@1.16.0(debug@4.4.3(supports-color@7.2.0)): axios@1.16.0:
dependencies: dependencies:
follow-redirects: 1.16.0(debug@4.4.3(supports-color@7.2.0)) follow-redirects: 1.16.0
form-data: 4.0.5 form-data: 4.0.5
proxy-from-env: 2.1.0 proxy-from-env: 2.1.0
transitivePeerDependencies: transitivePeerDependencies:
@@ -3248,11 +3221,9 @@ snapshots:
dayjs@1.11.20: {} dayjs@1.11.20: {}
debug@4.4.3(supports-color@7.2.0): debug@4.4.3:
dependencies: dependencies:
ms: 2.1.3 ms: 2.1.3
optionalDependencies:
supports-color: 7.2.0
delayed-stream@1.0.0: {} delayed-stream@1.0.0: {}
@@ -3460,9 +3431,7 @@ snapshots:
dependencies: dependencies:
to-regex-range: 5.0.1 to-regex-range: 5.0.1
follow-redirects@1.16.0(debug@4.4.3(supports-color@7.2.0)): follow-redirects@1.16.0: {}
optionalDependencies:
debug: 4.4.3(supports-color@7.2.0)
form-data@4.0.5: form-data@4.0.5:
dependencies: dependencies:
@@ -4157,10 +4126,10 @@ snapshots:
uuid@8.3.2: {} uuid@8.3.2: {}
vite-plugin-compression@0.5.1(supports-color@7.2.0)(vite@5.4.21(sass@1.99.0)(terser@5.46.2)): vite-plugin-compression@0.5.1(vite@5.4.21(sass@1.99.0)(terser@5.46.2)):
dependencies: dependencies:
chalk: 4.1.2 chalk: 4.1.2
debug: 4.4.3(supports-color@7.2.0) debug: 4.4.3
fs-extra: 10.1.0 fs-extra: 10.1.0
vite: 5.4.21(sass@1.99.0)(terser@5.46.2) vite: 5.4.21(sass@1.99.0)(terser@5.46.2)
transitivePeerDependencies: transitivePeerDependencies:
+36 -1
View File
@@ -271,7 +271,12 @@ export default {
this.runGeocode('address', lnglat) this.runGeocode('address', lnglat)
.then(result => { .then(result => {
const detailAddress = result.regeocode?.formattedAddress || fallbackAddress; const detailAddress = result.regeocode?.formattedAddress || fallbackAddress;
this.selected = { ...this.selected, address: detailAddress }; const region = this.resolveRegionFromGeocode(result);
this.selected = {
...this.selected,
address: detailAddress,
...region,
};
this.keyword = detailAddress || this.keyword; this.keyword = detailAddress || this.keyword;
this.status = detailAddress || '已选点,可确认回填'; this.status = detailAddress || '已选点,可确认回填';
}) })
@@ -285,6 +290,26 @@ export default {
this.resolving = false; this.resolving = false;
}); });
}, },
resolveRegionFromGeocode(result = {}) {
const component = result.regeocode?.addressComponent || {};
const city = Array.isArray(component.city) ? '' : String(component.city || '').trim();
const province = String(component.province || '').trim();
const district = String(component.district || '').trim();
const country = String(component.country || '').trim();
const adcode = String(component.adcode || '').trim();
return {
country,
province,
city: city || province,
district,
adcode,
regionCode: adcode,
provinceName: province,
cityName: city || province,
districtName: district,
countryName: country,
};
},
renderMarker(point) { renderMarker(point) {
this.clearMarker(); this.clearMarker();
this.marker = new window.AMap.Marker({ position: point }); this.marker = new window.AMap.Marker({ position: point });
@@ -310,6 +335,16 @@ export default {
address: this.selected.address, address: this.selected.address,
longitude: this.selected.longitude, longitude: this.selected.longitude,
latitude: this.selected.latitude, latitude: this.selected.latitude,
country: this.selected.country || this.selected.countryName || '',
province: this.selected.province || this.selected.provinceName || '',
city: this.selected.city || this.selected.cityName || '',
district: this.selected.district || this.selected.districtName || '',
adcode: this.selected.adcode || this.selected.regionCode || '',
regionCode: this.selected.regionCode || this.selected.adcode || '',
countryName: this.selected.countryName || this.selected.country || '',
provinceName: this.selected.provinceName || this.selected.province || '',
cityName: this.selected.cityName || this.selected.city || '',
districtName: this.selected.districtName || this.selected.district || '',
}); });
this.visible = false; this.visible = false;
}, },
+4
View File
@@ -305,6 +305,10 @@ export const createOption = () => ({
searchOrder: 3, searchOrder: 3,
searchPlaceholder: '请选择', searchPlaceholder: '请选择',
dicData: [], dicData: [],
props: {
label: 'label',
value: 'value',
},
filterable: true, filterable: true,
hide: true, hide: true,
display: false, display: false,
+3
View File
@@ -39,6 +39,7 @@ export const userOption = safe => {
prop: 'account', prop: 'account',
search: true, search: true,
searchOrder: 2, searchOrder: 2,
searchPlaceholder: '支持模糊搜索',
display: false, display: false,
}, },
{ {
@@ -46,6 +47,7 @@ export const userOption = safe => {
prop: 'realName', prop: 'realName',
search: true, search: true,
searchOrder: 4, searchOrder: 4,
searchPlaceholder: '支持模糊搜索',
display: false, display: false,
}, },
{ {
@@ -53,6 +55,7 @@ export const userOption = safe => {
prop: 'phone', prop: 'phone',
search: true, search: true,
searchOrder: 3, searchOrder: 3,
searchPlaceholder: '支持模糊搜索',
display: false, display: false,
}, },
{ label: '工号', prop: 'code', display: false }, { label: '工号', prop: 'code', display: false },
+14
View File
@@ -0,0 +1,14 @@
/**
* 合同下拉/选择展示:合同编号/合同名称
*
* @param {Object} contract 合同对象
* @returns {string}
*/
export function formatContractOptionLabel(contract = {}) {
const contractNo = String(contract?.contractNo ?? '').trim();
const contractName = String(contract?.contractName ?? '').trim();
if (contractNo && contractName) {
return `${contractNo}/${contractName}`;
}
return contractNo || contractName || '';
}
+30 -7
View File
@@ -344,15 +344,21 @@ export default {
getDeptTree(this.userInfo.tenantId).then(res => { getDeptTree(this.userInfo.tenantId).then(res => {
this.deptOptions = this.flattenDept(res.data.data || []); this.deptOptions = this.flattenDept(res.data.data || []);
const deptColumn = this.findColumn(this.option.column, 'searchDeptId'); const deptColumn = this.findColumn(this.option.column, 'searchDeptId');
deptColumn.dicData = this.deptOptions; if (deptColumn) {
deptColumn.dicData = this.deptOptions;
}
}); });
}, },
flattenDept(tree, level = 0) { flattenDept(tree, level = 0) {
const result = []; const result = [];
tree.forEach(item => { tree.forEach(item => {
// 雪花 ID 必须保持字符串,避免 JS Number 精度丢失导致筛错组织。
const id =
item.id === undefined || item.id === null || item.id === '' ? '' : String(item.id);
if (!id) return;
result.push({ result.push({
label: `${' '.repeat(level)}${item.title || item.deptName || item.name}`, label: `${' '.repeat(level)}${item.title || item.deptName || item.name}`,
value: item.id, value: id,
rawLabel: item.title || item.deptName || item.name, rawLabel: item.title || item.deptName || item.name,
}); });
if (item.children && item.children.length) { if (item.children && item.children.length) {
@@ -361,6 +367,19 @@ export default {
}); });
return result; return result;
}, },
normalizeListQuery(params = {}) {
// 搜索条件优先于缓存的 query,避免旧组织 ID 覆盖用户新选择的组织。
const query = { ...this.query, ...params };
const rawDeptId = query.deptId ?? query.searchDeptId;
delete query.searchDeptId;
if (rawDeptId !== undefined && rawDeptId !== null && String(rawDeptId).trim() !== '') {
query.deptId = String(rawDeptId).split(',')[0].trim();
} else {
delete query.deptId;
}
query.allDept = this.isAdmin ? 1 : 0;
return query;
},
getRecords(res) { getRecords(res) {
const data = res && res.data && res.data.data; const data = res && res.data && res.data.data;
if (Array.isArray(data)) return data; if (Array.isArray(data)) return data;
@@ -967,13 +986,15 @@ export default {
}, },
searchReset() { searchReset() {
this.query = {}; this.query = {};
this.allDept = this.isAdmin ? 1 : 0;
this.page.currentPage = 1; this.page.currentPage = 1;
this.onLoad(this.page); this.onLoad(this.page);
}, },
searchChange(params, done) { searchChange(params, done) {
this.query = params; this.query = this.normalizeListQuery(params);
this.allDept = this.query.allDept;
this.page.currentPage = 1; this.page.currentPage = 1;
this.onLoad(this.page, params); this.onLoad(this.page, this.query);
done(); done();
}, },
selectionChange(list) { selectionChange(list) {
@@ -994,7 +1015,10 @@ export default {
}, },
onLoad(page, params = {}) { onLoad(page, params = {}) {
this.loading = true; this.loading = true;
getList(page.currentPage, page.pageSize, { ...params, ...this.query, allDept: this.allDept }) const query = this.normalizeListQuery(params);
this.query = query;
this.allDept = query.allDept;
getList(page.currentPage, page.pageSize, query)
.then(res => { .then(res => {
const data = res.data.data; const data = res.data.data;
this.page.total = data.total; this.page.total = data.total;
@@ -1027,8 +1051,7 @@ export default {
}, },
buildExportParams() { buildExportParams() {
return { return {
...this.query, ...this.normalizeListQuery(this.query),
allDept: this.allDept,
ids: this.ids, ids: this.ids,
[this.website.tokenHeader]: getToken(), [this.website.tokenHeader]: getToken(),
}; };
+256 -45
View File
@@ -264,7 +264,7 @@ import {
changeStatus, changeStatus,
getPortSelect, getPortSelect,
} from '@/api/base/port-terminal'; } from '@/api/base/port-terminal';
import { getLazyTree } from '@/api/base/region'; import { getDetail as getRegionDetail, getLazyTree } from '@/api/base/region';
import { exportBlob } from '@/api/common'; import { exportBlob } from '@/api/common';
import { mapGetters } from 'vuex'; import { mapGetters } from 'vuex';
import { downloadXls } from '@/utils/util'; import { downloadXls } from '@/utils/util';
@@ -841,10 +841,60 @@ export default {
}, },
handleCountryNameChange(value) { handleCountryNameChange(value) {
const country = this.countryOptions.find(item => item.title === value); const country = this.countryOptions.find(item => item.title === value);
this.setProvinceOptions([]);
this.setCityOptions([]); this.setCityOptions([]);
this.setDistrictOptions([]); this.setDistrictOptions([]);
this.loadProvinceOptions(country ? country.id : ''); this.clearSearchCityAndDistrict();
// 搜索栏为国家 → 城市 → 区县(无省份),选中国家后需直接加载该国下全部城市
this.loadCityOptionsByCountry(country ? country.id : '');
},
clearSearchCityAndDistrict() {
const searchForm = this.$refs.crud && this.$refs.crud.searchForm;
if (searchForm) {
searchForm.city = undefined;
searchForm.districtName = undefined;
}
if (this.query) {
this.query.city = undefined;
this.query.districtName = undefined;
}
},
loadCityOptionsByCountry(countryCode) {
if (!countryCode) {
this.setCityOptions([]);
return Promise.resolve([]);
}
this.cityLoading = true;
return this.loadProvinceOptions(countryCode)
.then(provinces =>
Promise.all((provinces || []).map(province => this.fetchCityOptions(province.id)))
)
.then(cityGroups => {
const cityMap = new Map();
cityGroups.flat().forEach(city => {
if (city && city.id && !cityMap.has(city.id)) {
cityMap.set(city.id, city);
}
});
const cities = Array.from(cityMap.values());
this.setCityOptions(cities);
return cities;
})
.finally(() => {
this.cityLoading = false;
});
},
fetchCityOptions(provinceCode) {
if (!provinceCode) {
return Promise.resolve([]);
}
if (this.cityOptionCache[provinceCode]) {
return Promise.resolve(this.cityOptionCache[provinceCode]);
}
return getLazyTree(provinceCode).then(res => {
const options = (res.data.data || []).map(this.normalizeRegionOption);
this.cityOptionCache[provinceCode] = options;
return options;
});
}, },
syncCountryName(countryCode) { syncCountryName(countryCode) {
const country = this.countryOptions.find(item => item.id === countryCode); const country = this.countryOptions.find(item => item.id === countryCode);
@@ -925,10 +975,8 @@ export default {
return Promise.resolve(this.cityOptionCache[provinceCode]); return Promise.resolve(this.cityOptionCache[provinceCode]);
} }
this.cityLoading = true; this.cityLoading = true;
return getLazyTree(provinceCode) return this.fetchCityOptions(provinceCode)
.then(res => { .then(options => {
const options = (res.data.data || []).map(this.normalizeRegionOption);
this.cityOptionCache[provinceCode] = options;
this.setCityOptions(options); this.setCityOptions(options);
return options; return options;
}) })
@@ -1047,6 +1095,13 @@ export default {
handleCityNameChange(value) { handleCityNameChange(value) {
const city = this.cityOptions.find(item => item.title === value); const city = this.cityOptions.find(item => item.title === value);
this.setDistrictOptions([]); this.setDistrictOptions([]);
const searchForm = this.$refs.crud && this.$refs.crud.searchForm;
if (searchForm) {
searchForm.districtName = undefined;
}
if (this.query) {
this.query.districtName = undefined;
}
this.loadDistrictOptions(city ? city.id : ''); this.loadDistrictOptions(city ? city.id : '');
}, },
handleDistrictChange(value) { handleDistrictChange(value) {
@@ -1071,6 +1126,190 @@ export default {
if (selection.latitude !== undefined && selection.latitude !== null && selection.latitude !== '') { if (selection.latitude !== undefined && selection.latitude !== null && selection.latitude !== '') {
this.form.latitude = Number(selection.latitude).toFixed(6); this.form.latitude = Number(selection.latitude).toFixed(6);
} }
this.applyMapRegionSelection(selection);
},
normalizeAmapCityName(city, province) {
if (Array.isArray(city)) {
return String(province || '').trim();
}
const cityName = String(city || '').trim();
return cityName || String(province || '').trim();
},
buildRegionLookupCodes(adcode) {
const code = String(adcode || '').trim();
if (!code) {
return [];
}
const codes = [code];
if (/^\d{6}$/.test(code)) {
if (code.endsWith('00')) {
const cityCode = code.slice(0, 4);
if (cityCode && !codes.includes(cityCode)) {
codes.push(cityCode);
}
}
if (code.endsWith('0000')) {
const provinceCode = code.slice(0, 2);
if (provinceCode && !codes.includes(provinceCode)) {
codes.push(provinceCode);
}
}
}
return codes;
},
fetchRegionDetailByCodes(codes = []) {
const tryNext = index => {
if (index >= codes.length) {
return Promise.resolve(null);
}
return getRegionDetail(codes[index])
.then(res => {
const detail = res.data && res.data.data;
if (detail && detail.code) {
return detail;
}
return tryNext(index + 1);
})
.catch(() => tryNext(index + 1));
};
return tryNext(0);
},
resolveCountryFromRegionDetail(detail = {}) {
const ancestors = String(detail.ancestors || '')
.split(',')
.map(item => String(item || '').trim())
.filter(Boolean);
for (let index = 0; index < ancestors.length; index += 1) {
const ancestorCode = ancestors[index];
if (this.countryOptions.some(item => item.id === ancestorCode)) {
return ancestorCode;
}
}
if (
detail.parentCode &&
Number(detail.regionLevel) === 1 &&
this.countryOptions.some(item => item.id === String(detail.parentCode))
) {
return String(detail.parentCode);
}
if (/^\d{6}$/.test(String(detail.code || ''))) {
return DEFAULT_COUNTRY_CODE;
}
return '';
},
applyRegionDetail(detail = {}) {
const countryHint = this.resolveCountryFromRegionDetail(detail);
return this.resolveCountryCode(countryHint || DEFAULT_COUNTRY_CODE)
.then(countryCode => {
this.form.countryCode = countryCode;
this.syncCountryName(countryCode);
return this.loadProvinceOptions(countryCode);
})
.then(() => {
this.form.provinceCode =
String(detail.provinceCode || '') || this.resolveProvinceCode(detail.provinceName);
const province = this.provinceOptions.find(item => item.id === this.form.provinceCode);
this.form.provinceName = province ? province.title : detail.provinceName || '';
return this.loadCityOptions(this.form.provinceCode);
})
.then(() => {
this.form.cityCode =
String(detail.cityCode || '') ||
this.resolveCityCode(detail.cityName, detail.districtCode || detail.code);
const city = this.cityOptions.find(item => item.id === this.form.cityCode);
this.form.city = city ? city.title : detail.cityName || '';
return this.loadDistrictOptions(this.form.cityCode);
})
.then(() => {
this.form.districtCode = this.resolveDistrictCode(
detail.districtName || detail.name,
detail.districtCode || detail.code
);
this.handleDistrictChange(this.form.districtCode);
});
},
applyMapRegionByNames(selection = {}) {
const provinceName = String(selection.province || selection.provinceName || '').trim();
const cityName = this.normalizeAmapCityName(
selection.city || selection.cityName,
provinceName
);
const districtName = String(selection.district || selection.districtName || '').trim();
const countryName = String(selection.country || selection.countryName || '').trim();
const adcode = String(selection.adcode || selection.regionCode || '').trim();
const countryPromise = countryName
? this.resolveCountryCode(countryName)
: Promise.resolve(/^\d{6}$/.test(adcode) ? DEFAULT_COUNTRY_CODE : '');
return countryPromise
.then(countryCode => {
if (!countryCode) {
return null;
}
this.form.countryCode = countryCode;
this.syncCountryName(countryCode);
return this.loadProvinceOptions(countryCode);
})
.then(provinces => {
if (!provinces) {
return null;
}
this.form.provinceCode = this.resolveProvinceCode(provinceName);
const province = this.provinceOptions.find(item => item.id === this.form.provinceCode);
this.form.provinceName = province ? province.title : provinceName;
if (!this.form.provinceCode) {
this.clearCityValue();
return null;
}
return this.loadCityOptions(this.form.provinceCode);
})
.then(cities => {
if (!cities) {
return null;
}
this.form.cityCode = this.resolveCityCode(cityName, adcode);
const city = this.cityOptions.find(item => item.id === this.form.cityCode);
this.form.city = city ? city.title : cityName;
if (!this.form.cityCode) {
this.clearDistrictValue();
return null;
}
return this.loadDistrictOptions(this.form.cityCode);
})
.then(districts => {
if (!districts) {
return;
}
this.form.districtCode = this.resolveDistrictCode(districtName, adcode);
this.handleDistrictChange(this.form.districtCode);
});
},
applyMapRegionSelection(selection = {}) {
if (this.isParentRegionLocked) {
return Promise.resolve();
}
const adcode = String(selection.adcode || selection.regionCode || '').trim();
const hasNameHint = Boolean(
selection.country ||
selection.countryName ||
selection.province ||
selection.provinceName ||
selection.city ||
selection.cityName ||
selection.district ||
selection.districtName
);
if (!adcode && !hasNameHint) {
return Promise.resolve();
}
const lookupCodes = this.buildRegionLookupCodes(adcode);
return this.fetchRegionDetailByCodes(lookupCodes)
.then(detail => {
if (detail) {
return this.applyRegionDetail(detail);
}
return this.applyMapRegionByNames(selection);
})
.catch(() => this.applyMapRegionByNames(selection));
}, },
resolveCountryCode(country) { resolveCountryCode(country) {
if (!country) { if (!country) {
@@ -1443,42 +1682,14 @@ export default {
</style> </style>
<style lang="scss"> <style lang="scss">
/* 港口码头编辑/新增弹窗:对齐 railway-station 统一风格(灰底 + 白卡表单 + 浮动底栏,padding 24px 与全局弹窗标准一致) */ /* 港口码头编辑/新增弹窗:表单项行间距略高于全局默认 */
//.port-terminal-edit-dialog { .port-terminal-edit-dialog {
// /* 灰底内容区 */ .el-form-item,
// .el-dialog__body { .el-form-item--default.el-form-item,
// background-color: #f2f2f2; .el-form-item--small.el-form-item,
// padding: 8px; .el-form-item--large.el-form-item,
// } .el-form-item--medium.el-form-item {
// /* 表单白卡(与全局 .el-dialog .avue-form 一致,padding 24px 对齐 customer-archive / railway-station) */ margin-bottom: 22px;
// .avue-form { }
// background: #fff; }
// border-radius: 6px;
// box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);
// padding: 24px !important;
// margin-bottom: 0;
// }
// /* 底部按钮区白卡(Avue 弹窗 footer 在 body 内,接续白卡) */
// .avue-dialog__footer {
// background: #fff;
// border-radius: 0 0 6px 6px;
// box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);
// padding: 16px 24px !important;
// display: flex;
// justify-content: flex-end;
// }
// /* label 宽度统一 108px(对齐 railway-station,标签对齐更整齐) */
// .el-form-item__label {
// width: 108px !important;
// }
// /* 所有 input 文本框、select 下拉控件统一宽度 250px */
// .el-input,
// .el-select {
// width: 250px !important;
// }
// /* 备注宽度 85% */
// .remark-input {
// width: 85% !important;
// }
//}
</style> </style>
+15 -11
View File
@@ -171,7 +171,12 @@ export default {
} }
}; };
const validateTelegraphCode = (rule, value, callback) => { const validateTelegraphCode = (rule, value, callback) => {
if (!/^[A-Z]{3}$/.test(String(value || '').toUpperCase())) { const telegraphCode = String(value || '').trim();
if (!telegraphCode) {
callback();
return;
}
if (!/^[A-Z]{3}$/.test(telegraphCode.toUpperCase())) {
callback(new Error('电报略码格式不正确或已存在')); callback(new Error('电报略码格式不正确或已存在'));
} else { } else {
callback(); callback();
@@ -273,10 +278,7 @@ export default {
prop: 'telegraphCode', prop: 'telegraphCode',
minWidth: 100, minWidth: 100,
maxlength: 3, maxlength: 3,
rules: [ rules: [{ validator: validateTelegraphCode, trigger: 'blur' }],
{ required: true, message: '电报略码格式不正确或已存在', trigger: 'blur' },
{ validator: validateTelegraphCode, trigger: 'blur' },
],
change: ({ value }) => this.handleTelegraphChange(value), change: ({ value }) => this.handleTelegraphChange(value),
blur: ({ value }) => this.handleTelegraphChange(value), blur: ({ value }) => this.handleTelegraphChange(value),
}, },
@@ -703,6 +705,7 @@ export default {
}, },
normalizeRow(row) { normalizeRow(row) {
row.code = row.tmisCode ? `TL${row.tmisCode}` : row.code; row.code = row.tmisCode ? `TL${row.tmisCode}` : row.code;
row.telegraphCode = String(row.telegraphCode || '').trim() || undefined;
row.regionCode = String(row.regionCode || '').trim(); row.regionCode = String(row.regionCode || '').trim();
row.regionName = String(row.regionName || '').trim(); row.regionName = String(row.regionName || '').trim();
row.districtCode = String(row.districtCode || '').trim(); row.districtCode = String(row.districtCode || '').trim();
@@ -735,14 +738,15 @@ export default {
return records.some(item => item[prop] === row[prop] && String(item.id || '') !== rowId); return records.some(item => item[prop] === row[prop] && String(item.id || '') !== rowId);
}); });
}; };
return Promise.all([ const uniqueChecks = [hasDuplicate({ tmisCode: row.tmisCode }, 'tmisCode')];
hasDuplicate({ tmisCode: row.tmisCode }, 'tmisCode'), if (row.telegraphCode) {
hasDuplicate({ telegraphCode: row.telegraphCode }, 'telegraphCode'), uniqueChecks.push(hasDuplicate({ telegraphCode: row.telegraphCode }, 'telegraphCode'));
]).then(([tmisExists, telegraphExists]) => { }
if (tmisExists) { return Promise.all(uniqueChecks).then(results => {
if (results[0]) {
return Promise.reject(new Error('该TMIS编码已存在')); return Promise.reject(new Error('该TMIS编码已存在'));
} }
if (telegraphExists) { if (results[1]) {
return Promise.reject(new Error('电报略码格式不正确或已存在')); return Promise.reject(new Error('电报略码格式不正确或已存在'));
} }
return Promise.resolve(); return Promise.resolve();
+2 -1
View File
@@ -352,7 +352,8 @@ export default {
return result; return result;
}, },
normalizeListQuery(params = {}) { normalizeListQuery(params = {}) {
const query = { ...params, ...this.query }; // 搜索条件优先于缓存的 query,避免默认组织 ID 覆盖用户新选择的组织。
const query = { ...this.query, ...params };
const rawDeptId = query.deptId ?? query.searchDeptId; const rawDeptId = query.deptId ?? query.searchDeptId;
delete query.searchDeptId; delete query.searchDeptId;
if (rawDeptId !== undefined && rawDeptId !== null && String(rawDeptId).trim() !== '') { if (rawDeptId !== undefined && rawDeptId !== null && String(rawDeptId).trim() !== '') {
+17 -8
View File
@@ -415,19 +415,27 @@ export default {
}); });
}, },
buildDeptTree(tree) { buildDeptTree(tree) {
return tree.map(item => ({ return tree.map(item => {
label: item.title || item.deptName || item.name, // 雪花 ID 必须保持字符串,避免 JS Number 精度丢失导致筛错组织。
value: item.id, const id =
children: item.id === undefined || item.id === null || item.id === '' ? '' : String(item.id);
item.children && item.children.length ? this.buildDeptTree(item.children) : undefined, return {
})); label: item.title || item.deptName || item.name,
value: id,
children:
item.children && item.children.length ? this.buildDeptTree(item.children) : undefined,
};
}).filter(item => item.value);
}, },
flattenDept(tree, level = 0) { flattenDept(tree, level = 0) {
const result = []; const result = [];
tree.forEach(item => { tree.forEach(item => {
const id =
item.id === undefined || item.id === null || item.id === '' ? '' : String(item.id);
if (!id) return;
result.push({ result.push({
label: `${' '.repeat(level)}${item.title || item.deptName || item.name}`, label: `${' '.repeat(level)}${item.title || item.deptName || item.name}`,
value: item.id, value: id,
}); });
if (item.children && item.children.length) { if (item.children && item.children.length) {
result.push(...this.flattenDept(item.children, level + 1)); result.push(...this.flattenDept(item.children, level + 1));
@@ -445,7 +453,8 @@ export default {
); );
}, },
normalizeListQuery(params = {}) { normalizeListQuery(params = {}) {
const query = { ...params, ...this.query }; // 搜索条件优先于缓存的 query,避免默认组织 ID 覆盖用户新选择的组织。
const query = { ...this.query, ...params };
const rawDeptId = query.deptId ?? query.searchDeptId; const rawDeptId = query.deptId ?? query.searchDeptId;
delete query.searchDeptId; delete query.searchDeptId;
if (rawDeptId !== undefined && rawDeptId !== null && String(rawDeptId).trim() !== '') { if (rawDeptId !== undefined && rawDeptId !== null && String(rawDeptId).trim() !== '') {
@@ -215,7 +215,7 @@
<el-option <el-option
v-for="item in contractOptions" v-for="item in contractOptions"
:key="item.id" :key="item.id"
:label="item.contractName" :label="formatContractOptionLabel(item)"
:value="item.id" :value="item.id"
/> />
</el-select> </el-select>
@@ -3056,7 +3056,7 @@
<el-option <el-option
v-for="item in transportPlanImportContractOptions" v-for="item in transportPlanImportContractOptions"
:key="item.id" :key="item.id"
:label="item.contractName" :label="formatContractOptionLabel(item)"
:value="item.id" :value="item.id"
/> />
</el-select> </el-select>
@@ -5242,6 +5242,7 @@ import { addressTypeOptions } from '@/option/base/common-address';
import { packageOptions } from '@/option/business/common'; import { packageOptions } from '@/option/business/common';
import { formatUpdateUserName } from '@/utils/audit'; import { formatUpdateUserName } from '@/utils/audit';
import { getToken, isAdministrator } from '@/utils/auth'; import { getToken, isAdministrator } from '@/utils/auth';
import { formatContractOptionLabel } from '@/utils/contract';
import { openImportDialog } from '@/utils/import-excel'; import { openImportDialog } from '@/utils/import-excel';
import { normalizeMapSearchResults, searchAmapPlaceText } from '@/utils/map-search'; import { normalizeMapSearchResults, searchAmapPlaceText } from '@/utils/map-search';
import { loadMeasurementUnitOptions } from '@/utils/measurement-unit'; import { loadMeasurementUnitOptions } from '@/utils/measurement-unit';
@@ -6590,6 +6591,7 @@ export default {
}, },
}, },
methods: { methods: {
formatContractOptionLabel,
initStandaloneFormPage() { initStandaloneFormPage() {
if (!this.isStandaloneFormPage) return; if (!this.isStandaloneFormPage) return;
const mode = this.$route.query.mode === 'edit' ? 'edit' : 'add'; const mode = this.$route.query.mode === 'edit' ? 'edit' : 'add';
@@ -317,6 +317,7 @@
<script> <script>
import * as api from '@/api/business/master-order'; import * as api from '@/api/business/master-order';
import { fetchDriversByCarrierOrganizations } from '@/utils/carrier-org-resource'; import { fetchDriversByCarrierOrganizations } from '@/utils/carrier-org-resource';
import { formatContractOptionLabel } from '@/utils/contract';
import { loadMeasurementUnitOptions } from '@/utils/measurement-unit'; import { loadMeasurementUnitOptions } from '@/utils/measurement-unit';
import { isMobile } from '@/utils/validate'; import { isMobile } from '@/utils/validate';
@@ -904,9 +905,11 @@ export default {
}, },
carrierOptionLabel(item) { carrierOptionLabel(item) {
const duplicateCount = this.carrierOptions.filter(option => option.carrierName === item.carrierName).length; const duplicateCount = this.carrierOptions.filter(option => option.carrierName === item.carrierName).length;
return duplicateCount > 1 if (duplicateCount <= 1) {
? `${item.carrierName}(${item.contractName || item.contractId})` return item.carrierName;
: item.carrierName; }
const contractLabel = formatContractOptionLabel(item);
return contractLabel ? `${item.carrierName}(${contractLabel})` : item.carrierName;
}, },
driverOptionLabel(item) { return item.driverName || item.name || ''; }, driverOptionLabel(item) { return item.driverName || item.name || ''; },
driverOptionKey(item) { return item.id || item.driverId || this.driverOptionLabel(item) || item.mobile; }, driverOptionKey(item) { return item.id || item.driverId || this.driverOptionLabel(item) || item.mobile; },
@@ -27,7 +27,7 @@
><el-option ><el-option
v-for="contract in contracts" v-for="contract in contracts"
:key="contract.id" :key="contract.id"
:label="contract.contractName" :label="formatContractOptionLabel(contract)"
:value="contract.id" /></el-select></el-form-item></el-col :value="contract.id" /></el-select></el-form-item></el-col
><el-col :span="6" ><el-col :span="6"
><el-form-item label="总单号" required ><el-form-item label="总单号" required
@@ -589,6 +589,7 @@ import { getList as getCargoTypeList } from '@/api/base/cargo-type';
import { getLazyTree as getRegionLazyTree } from '@/api/base/region'; import { getLazyTree as getRegionLazyTree } from '@/api/base/region';
import { getList as getCommonCargoList } from '@/api/business/common-cargo'; import { getList as getCommonCargoList } from '@/api/business/common-cargo';
import { exportBlob, importBlob } from '@/api/common'; import { exportBlob, importBlob } from '@/api/common';
import { formatContractOptionLabel } from '@/utils/contract';
import { downloadFileByUrl, downloadXls } from '@/utils/util'; import { downloadFileByUrl, downloadXls } from '@/utils/util';
import { OfficeBuilding, Search } from '@element-plus/icons-vue'; import { OfficeBuilding, Search } from '@element-plus/icons-vue';
import { ElImageViewer } from 'element-plus'; import { ElImageViewer } from 'element-plus';
@@ -784,6 +785,7 @@ export default {
} }
}, },
methods: { methods: {
formatContractOptionLabel,
defaultQuantityUnit() { defaultQuantityUnit() {
return this.quantityUnitOptions[0] || '吨'; return this.quantityUnitOptions[0] || '吨';
}, },
@@ -113,7 +113,7 @@
<el-option <el-option
v-for="item in contractOptions" v-for="item in contractOptions"
:key="item.id" :key="item.id"
:label="item.contractName" :label="formatContractOptionLabel(item)"
:value="item.id" :value="item.id"
/> />
</el-select> </el-select>
@@ -1098,6 +1098,7 @@ import {
import { getDictionary as getSystemDictionary } from '@/api/system/dict'; import { getDictionary as getSystemDictionary } from '@/api/system/dict';
import { getDictionary } from '@/api/system/dictbiz'; import { getDictionary } from '@/api/system/dictbiz';
import { packageOptions } from '@/option/business/common'; import { packageOptions } from '@/option/business/common';
import { formatContractOptionLabel } from '@/utils/contract';
import { loadMeasurementUnitOptions } from '@/utils/measurement-unit'; import { loadMeasurementUnitOptions } from '@/utils/measurement-unit';
import { normalizeMapSearchResults, searchAmapPlaceText } from '@/utils/map-search'; import { normalizeMapSearchResults, searchAmapPlaceText } from '@/utils/map-search';
import { downloadFileByUrl, downloadXls } from '@/utils/util'; import { downloadFileByUrl, downloadXls } from '@/utils/util';
@@ -1533,6 +1534,7 @@ export default {
if (this.isStandaloneFormPage) this.$nextTick(() => this.initStandaloneFormPage()); if (this.isStandaloneFormPage) this.$nextTick(() => this.initStandaloneFormPage());
}, },
methods: { methods: {
formatContractOptionLabel,
loadQuantityUnitOptions() { loadQuantityUnitOptions() {
if (this.quantityUnitLoading) return this.quantityUnitLoadPromise; if (this.quantityUnitLoading) return this.quantityUnitLoadPromise;
this.quantityUnitLoading = true; this.quantityUnitLoading = true;
@@ -149,7 +149,7 @@
<el-option <el-option
v-for="item in contractOptions" v-for="item in contractOptions"
:key="item.id" :key="item.id"
:label="item.contractName" :label="formatContractOptionLabel(item)"
:value="item.id" :value="item.id"
/> />
</el-select> </el-select>
@@ -980,7 +980,7 @@
<el-option <el-option
v-for="item in transportPlanImportContractOptions" v-for="item in transportPlanImportContractOptions"
:key="item.id" :key="item.id"
:label="item.contractName" :label="formatContractOptionLabel(item)"
:value="item.id" :value="item.id"
/> />
</el-select> </el-select>
@@ -2741,6 +2741,7 @@ import { addressTypeOptions } from '@/option/base/common-address';
import { packageOptions } from '@/option/business/common'; import { packageOptions } from '@/option/business/common';
import { formatUpdateUserName } from '@/utils/audit'; import { formatUpdateUserName } from '@/utils/audit';
import { getToken, isAdministrator } from '@/utils/auth'; import { getToken, isAdministrator } from '@/utils/auth';
import { formatContractOptionLabel } from '@/utils/contract';
import { normalizeMapSearchResults, searchAmapPlaceText } from '@/utils/map-search'; import { normalizeMapSearchResults, searchAmapPlaceText } from '@/utils/map-search';
import { loadMeasurementUnitOptions } from '@/utils/measurement-unit'; import { loadMeasurementUnitOptions } from '@/utils/measurement-unit';
import { applyTableMenuWidth } from '@/utils/table-menu'; import { applyTableMenuWidth } from '@/utils/table-menu';
@@ -3721,6 +3722,7 @@ export default {
}, },
}, },
methods: { methods: {
formatContractOptionLabel,
initStandaloneFormPage() { initStandaloneFormPage() {
if (!this.isStandaloneFormPage) return; if (!this.isStandaloneFormPage) return;
const mode = this.$route.query.mode === 'edit' ? 'edit' : 'add'; const mode = this.$route.query.mode === 'edit' ? 'edit' : 'add';
@@ -374,7 +374,7 @@
<el-option <el-option
v-for="item in contracts" v-for="item in contracts"
:key="item.id" :key="item.id"
:label="item.contractName" :label="formatContractOptionLabel(item)"
:value="item.id" :value="item.id"
/> />
</el-select> </el-select>
@@ -610,6 +610,7 @@ import { getList as getProjectList } from '@/api/business/project-apply';
import { getList as getDriverList } from '@/api/transportCapacity/driver'; import { getList as getDriverList } from '@/api/transportCapacity/driver';
import { getDictionary } from '@/api/system/dictbiz'; import { getDictionary } from '@/api/system/dictbiz';
import * as api from '@/api/business/waybill-manage'; import * as api from '@/api/business/waybill-manage';
import { formatContractOptionLabel } from '@/utils/contract';
import { downloadXls } from '@/utils/util'; import { downloadXls } from '@/utils/util';
import SectionCard from '@/components/section-card/main.vue'; import SectionCard from '@/components/section-card/main.vue';
@@ -1297,6 +1298,31 @@ const carrierChange = value => {
form.carrierName = item.carrierName || ''; form.carrierName = item.carrierName || '';
if (!isSelfOperated.value) form.carrierContractId = item.carrierContractId || ''; if (!isSelfOperated.value) form.carrierContractId = item.carrierContractId || '';
}; };
const firstNotEmpty = (...values) => values.find(value => String(value ?? '').trim()) ?? '';
const OPTIONAL_NUMBER_EMPTY_SENTINELS = [-1];
const normalizeOptionalImportNumber = (value, emptySentinels = OPTIONAL_NUMBER_EMPTY_SENTINELS) => {
if (!String(value ?? '').trim()) return null;
return emptySentinels.some(sentinel => Number(value) === sentinel) ? null : value;
};
const normalizeImportRow = row => ({
...row,
mileage: normalizeOptionalImportNumber(
firstNotEmpty(row.mileage, row['里程'], row['里程(km)'], row['里程(公里)'])
),
otherFeeTotal: normalizeOptionalImportNumber(
firstNotEmpty(row.otherFeeTotal, row['其他费用合计'])
),
unitPrice: normalizeOptionalImportNumber(firstNotEmpty(row.unitPrice, row['单价'])),
freight: normalizeOptionalImportNumber(firstNotEmpty(row.freight, row['运费'])),
freightTotal: normalizeOptionalImportNumber(firstNotEmpty(row.freightTotal, row['运费合计'])),
transportType: firstNotEmpty(
row.transportType,
row['运输类型'],
row['*运输类型'],
row['运输方式'],
row['*运输方式']
),
});
const fileChange = async (file, list) => { const fileChange = async (file, list) => {
if (!projectInfoReady.value) { if (!projectInfoReady.value) {
ElMessage.warning('请先选择项目、客户合同和承运信息,再导入运单明细'); ElMessage.warning('请先选择项目、客户合同和承运信息,再导入运单明细');
@@ -1370,6 +1396,9 @@ const fileChange = async (file, list) => {
item[key] ?? item[key] ??
''; '';
}); });
['mileage', 'unitPrice', 'freight', 'otherFeeTotal', 'freightTotal'].forEach(prop => {
row[prop] = normalizeOptionalImportNumber(row[prop]);
});
row.actualStartDate = normalizeImportDate(row.actualStartDate); row.actualStartDate = normalizeImportDate(row.actualStartDate);
row.actualEndDate = normalizeImportDate(row.actualEndDate); row.actualEndDate = normalizeImportDate(row.actualEndDate);
row.planStartDate = normalizeImportDate(row.planStartDate); row.planStartDate = normalizeImportDate(row.planStartDate);
@@ -1656,31 +1685,6 @@ const removeSelectedRows = () => {
rowSelection.value = []; rowSelection.value = [];
refreshDuplicateFlags(); refreshDuplicateFlags();
}; };
const firstNotEmpty = (...values) => values.find(value => String(value ?? '').trim()) ?? '';
const normalizeOptionalImportNumber = (value, emptySentinels = []) => {
if (!String(value ?? '').trim()) return null;
return emptySentinels.some(sentinel => Number(value) === sentinel) ? null : value;
};
const normalizeImportRow = row => ({
...row,
mileage: normalizeOptionalImportNumber(
firstNotEmpty(row.mileage, row['里程'], row['里程(km)'], row['里程(公里)']),
[-1]
),
otherFeeTotal: normalizeOptionalImportNumber(
firstNotEmpty(row.otherFeeTotal, row['其他费用合计'])
),
unitPrice: normalizeOptionalImportNumber(firstNotEmpty(row.unitPrice, row['单价'])),
freight: normalizeOptionalImportNumber(firstNotEmpty(row.freight, row['运费'])),
freightTotal: normalizeOptionalImportNumber(firstNotEmpty(row.freightTotal, row['运费合计'])),
transportType: firstNotEmpty(
row.transportType,
row['运输类型'],
row['*运输类型'],
row['运输方式'],
row['*运输方式']
),
});
const normalizeOptionalPlanId = value => { const normalizeOptionalPlanId = value => {
if (value === undefined || value === null || value === '') return null; if (value === undefined || value === null || value === '') return null;
return Number(value) === -1 || Number(value) <= 0 ? null : value; return Number(value) === -1 || Number(value) <= 0 ? null : value;
@@ -212,7 +212,7 @@
<el-option <el-option
v-for="item in contractOptions" v-for="item in contractOptions"
:key="item.id" :key="item.id"
:label="item.contractName" :label="formatContractOptionLabel(item)"
:value="item.id" :value="item.id"
/> />
</el-select> </el-select>
@@ -3642,6 +3642,7 @@ import { addressTypeOptions } from '@/option/base/common-address';
import { packageOptions } from '@/option/business/common'; import { packageOptions } from '@/option/business/common';
import { formatUpdateUserName } from '@/utils/audit'; import { formatUpdateUserName } from '@/utils/audit';
import { getToken, isAdministrator } from '@/utils/auth'; import { getToken, isAdministrator } from '@/utils/auth';
import { formatContractOptionLabel } from '@/utils/contract';
import { wgs84ToGcj02 } from '@/utils/coordinate'; import { wgs84ToGcj02 } from '@/utils/coordinate';
import { openImportDialog } from '@/utils/import-excel'; import { openImportDialog } from '@/utils/import-excel';
import { normalizeMapSearchResults, searchAmapPlaceText } from '@/utils/map-search'; import { normalizeMapSearchResults, searchAmapPlaceText } from '@/utils/map-search';
@@ -4724,6 +4725,7 @@ export default {
}, },
}, },
methods: { methods: {
formatContractOptionLabel,
// 页面被 keep-alive 缓存/卸载时调用,关闭本页所有 append-to-body 的弹窗, // 页面被 keep-alive 缓存/卸载时调用,关闭本页所有 append-to-body 的弹窗,
// 避免 Teleport 出去的 DOM 残留在 body 上盖住后续页面(详见 data 里的说明)。 // 避免 Teleport 出去的 DOM 残留在 body 上盖住后续页面(详见 data 里的说明)。
closeInnerDialogs() { closeInnerDialogs() {
@@ -6958,9 +6960,11 @@ export default {
applyFormDetail(row) { applyFormDetail(row) {
this.suppressTransportTypeClear = true; this.suppressTransportTypeClear = true;
this.form = { ...(row || {}) }; this.form = { ...(row || {}) };
['quantity', 'mileage', 'unitPrice'].forEach(prop => { ['quantity', 'mileage', 'unitPrice', 'otherFeeTotal', 'freight', 'freightTotal'].forEach(
if (Number(this.form[prop]) === -1) this.form[prop] = ''; prop => {
}); if (this.isSentinelMinusOne(this.form[prop])) this.form[prop] = '';
}
);
if ([this.form.planId, this.form.planName].some(value => Number(value) === -1)) { if ([this.form.planId, this.form.planName].some(value => Number(value) === -1)) {
this.form.planId = ''; this.form.planId = '';
this.form.planName = ''; this.form.planName = '';
@@ -7371,17 +7375,17 @@ export default {
this.form.quantityUnit || taskInfo.quantityUnit || goodsInfo.quantityUnit || '吨'; this.form.quantityUnit || taskInfo.quantityUnit || goodsInfo.quantityUnit || '吨';
const mileage = this.form.mileage || taskInfo.mileage || goodsInfo.mileage || ''; const mileage = this.form.mileage || taskInfo.mileage || goodsInfo.mileage || '';
this.form.mileage = this.normalizeMileageValue(mileage); this.form.mileage = this.normalizeMileageValue(mileage);
this.form.unitPrice = this.form.unitPrice || taskInfo.unitPrice || goodsInfo.unitPrice || ''; this.form.unitPrice = this.normalizeOptionalAmount(
this.form.unitPrice || taskInfo.unitPrice || goodsInfo.unitPrice || ''
);
['quantity', 'mileage', 'unitPrice'].forEach(prop => { ['quantity', 'mileage', 'unitPrice'].forEach(prop => {
if (Number(this.form[prop]) === -1) this.form[prop] = ''; if (this.isSentinelMinusOne(this.form[prop])) this.form[prop] = '';
}); });
this.form.priceUnit = this.form.priceUnit =
this.form.priceUnit || taskInfo.priceUnit || goodsInfo.priceUnit || '元/吨'; this.form.priceUnit || taskInfo.priceUnit || goodsInfo.priceUnit || '元/吨';
this.form.otherFeeTotal = this.form.otherFeeTotal = this.normalizeOptionalAmount(
this.form.otherFeeTotal || taskInfo.otherFeeTotal || goodsInfo.otherFeeTotal || ''; this.form.otherFeeTotal || taskInfo.otherFeeTotal || goodsInfo.otherFeeTotal || ''
if (Number(this.form.otherFeeTotal) === -1) { );
this.form.otherFeeTotal = '';
}
this.form.estimatedStartTime = this.form.estimatedStartTime =
this.form.estimatedStartTime || this.form.estimatedStartTime ||
taskInfo.estimatedStartTime || taskInfo.estimatedStartTime ||
@@ -7463,7 +7467,7 @@ export default {
}, },
taskFullFreightGroupUnitPrice(group = {}) { taskFullFreightGroupUnitPrice(group = {}) {
const prices = (group.rows || []) const prices = (group.rows || [])
.map(cargo => String(cargo.unitPrice ?? '').trim()) .map(cargo => this.normalizeOptionalAmount(cargo.unitPrice))
.filter(Boolean); .filter(Boolean);
if (!prices.length || prices.some(price => price !== prices[0])) return ''; if (!prices.length || prices.some(price => price !== prices[0])) return '';
return prices[0]; return prices[0];
@@ -7526,10 +7530,21 @@ export default {
}, },
formatTaskFullFreightNumber(value) { formatTaskFullFreightNumber(value) {
if (value === undefined || value === null || String(value).trim() === '') return ''; if (value === undefined || value === null || String(value).trim() === '') return '';
const number = Number(value || 0); if (this.isSentinelMinusOne(value)) return '';
const number = Number(value);
if (!Number.isFinite(number)) return ''; if (!Number.isFinite(number)) return '';
return Number(number.toFixed(2)).toString(); return Number(number.toFixed(2)).toString();
}, },
isSentinelMinusOne(value) {
if (value === undefined || value === null || value === '') return false;
return Number(value) === -1 || String(value).trim() === '-1';
},
normalizeOptionalAmount(value) {
if (value === undefined || value === null || value === '' || this.isSentinelMinusOne(value)) {
return '';
}
return value;
},
handleTaskCarrierTypeChange(value) { handleTaskCarrierTypeChange(value) {
const nextValue = value || '承运商'; const nextValue = value || '承运商';
this.form.carrierName = ''; this.form.carrierName = '';
@@ -8082,7 +8097,9 @@ export default {
} }
cargo.priceUnit = cargo.priceUnit || this.form.priceUnit || '元/吨'; cargo.priceUnit = cargo.priceUnit || this.form.priceUnit || '元/吨';
if (this.isBillingFieldEmpty(cargo.freightAmount)) { if (this.isBillingFieldEmpty(cargo.freightAmount)) {
cargo.freightAmount = freightItems[index]?.freightAmount ?? ''; cargo.freightAmount = this.normalizeOptionalAmount(
freightItems[index]?.freightAmount ?? ''
);
} }
return cargo; return cargo;
}); });
@@ -8274,8 +8291,10 @@ export default {
}, },
syncTaskInfoToRow(row) { syncTaskInfoToRow(row) {
row.taskEntryMode = row.taskEntryMode || 'simple'; row.taskEntryMode = row.taskEntryMode || 'simple';
['quantity', 'mileage', 'unitPrice'].forEach(prop => { ['quantity', 'mileage', 'unitPrice', 'otherFeeTotal'].forEach(prop => {
if (this.isBillingFieldEmpty(row[prop]) || Number(row[prop]) === -1) row[prop] = ''; if (this.isBillingFieldEmpty(row[prop]) || this.isSentinelMinusOne(row[prop])) {
row[prop] = '';
}
}); });
const taskInfo = { const taskInfo = {
taskEntryMode: row.taskEntryMode, taskEntryMode: row.taskEntryMode,
@@ -8300,7 +8319,7 @@ export default {
priceUnit: row.priceUnit, priceUnit: row.priceUnit,
taskRemark: row.taskRemark, taskRemark: row.taskRemark,
}; };
if (!this.isBillingFieldEmpty(row.otherFeeTotal) && Number(row.otherFeeTotal) !== -1) { if (!this.isBillingFieldEmpty(row.otherFeeTotal) && !this.isSentinelMinusOne(row.otherFeeTotal)) {
taskInfo.otherFeeTotal = row.otherFeeTotal; taskInfo.otherFeeTotal = row.otherFeeTotal;
} else { } else {
delete row.otherFeeTotal; delete row.otherFeeTotal;
@@ -8434,10 +8453,12 @@ export default {
cargoName: row.cargoName || row.goodsName || '', cargoName: row.cargoName || row.goodsName || '',
packageType: row.packageType || row.package || '', packageType: row.packageType || row.package || '',
specification: row.specification || row.spec || '', specification: row.specification || row.spec || '',
freightAmount: row.freightAmount ?? row.amount ?? row.totalAmount ?? '', freightAmount: this.normalizeOptionalAmount(
row.freightAmount ?? row.amount ?? row.totalAmount ?? ''
),
}; };
['quantity', 'mileage', 'unitPrice'].forEach(prop => { ['quantity', 'mileage', 'unitPrice', 'freightAmount'].forEach(prop => {
if (Number(cargo[prop]) === -1) cargo[prop] = ''; if (this.isSentinelMinusOne(cargo[prop])) cargo[prop] = '';
}); });
return cargo; return cargo;
}, },
@@ -8680,7 +8701,12 @@ export default {
} }
}, },
isBillingFieldEmpty(value) { isBillingFieldEmpty(value) {
return value === undefined || value === null || String(value).trim() === ''; return (
value === undefined ||
value === null ||
String(value).trim() === '' ||
this.isSentinelMinusOne(value)
);
}, },
ensureTransportTypeBeforeAddress() { ensureTransportTypeBeforeAddress() {
if (!this.shippingInfoFormEnabled || !this.isBillingFieldEmpty(this.form.transportType)) { if (!this.shippingInfoFormEnabled || !this.isBillingFieldEmpty(this.form.transportType)) {
+14 -1
View File
@@ -1383,7 +1383,11 @@
<el-option <el-option
v-for="item in taskCarrierOptions" v-for="item in taskCarrierOptions"
:key="item.id || item.carrierName" :key="item.id || item.carrierName"
:label="item.carrierName || item.partyB" :label="
dialogForm.carrierType === '承运商'
? formatTaskCarrierContractLabel(item)
: item.carrierName || item.partyB
"
:value=" :value="
dialogForm.carrierType === '承运商' dialogForm.carrierType === '承运商'
? item.id ? item.id
@@ -1699,6 +1703,7 @@ import { getParentOptions as getCargoTypeOptions } from '@/api/base/cargo-type';
import { getList as getCustomerList } from '@/api/vehicle/customer-archive'; import { getList as getCustomerList } from '@/api/vehicle/customer-archive';
import { getList as getDriverList } from '@/api/transportCapacity/driver'; import { getList as getDriverList } from '@/api/transportCapacity/driver';
import { fetchDriversByCarrierOrganizations } from '@/utils/carrier-org-resource'; import { fetchDriversByCarrierOrganizations } from '@/utils/carrier-org-resource';
import { formatContractOptionLabel } from '@/utils/contract';
import { import {
getList as getProcessConfigList, getList as getProcessConfigList,
getDetail as getProcessConfigDetail, getDetail as getProcessConfigDetail,
@@ -2174,6 +2179,14 @@ export default {
}, },
}, },
methods: { methods: {
formatTaskCarrierContractLabel(item = {}) {
const carrierName = item.carrierName || item.partyB || '';
const contractLabel = formatContractOptionLabel(item);
if (carrierName && contractLabel) {
return `${carrierName}(${contractLabel})`;
}
return carrierName || contractLabel;
},
syncStandaloneTagTitle() { syncStandaloneTagTitle() {
if (!this.isStandalonePage) return; if (!this.isStandalonePage) return;
const title = this.isStandaloneDetailPage ? this.detailPageTitle : this.formPageDefaultTitle; const title = this.isStandaloneDetailPage ? this.detailPageTitle : this.formPageDefaultTitle;
+16 -4
View File
@@ -573,7 +573,7 @@
type="textarea" type="textarea"
:rows="2" :rows="2"
placeholder="请输入" placeholder="请输入"
maxlength="200" maxlength="1000"
show-word-limit show-word-limit
/> />
</el-form-item> </el-form-item>
@@ -583,7 +583,7 @@
type="textarea" type="textarea"
:rows="2" :rows="2"
placeholder="请输入" placeholder="请输入"
maxlength="200" maxlength="1000"
show-word-limit show-word-limit
/> />
</el-form-item> </el-form-item>
@@ -593,7 +593,7 @@
type="textarea" type="textarea"
:rows="2" :rows="2"
placeholder="请输入" placeholder="请输入"
maxlength="200" maxlength="1000"
show-word-limit show-word-limit
/> />
</el-form-item> </el-form-item>
@@ -603,7 +603,7 @@
type="textarea" type="textarea"
:rows="2" :rows="2"
placeholder="请输入" placeholder="请输入"
maxlength="200" maxlength="1000"
show-word-limit show-word-limit
/> />
</el-form-item> </el-form-item>
@@ -1188,6 +1188,18 @@ export default {
changeReason: [ changeReason: [
{ max: 2000, message: '变更原因不能超过2000个字符', trigger: 'blur' }, { max: 2000, message: '变更原因不能超过2000个字符', trigger: 'blur' },
], ],
projectIntro: [
{ max: 1000, message: '项目简介不能超过1000个字符', trigger: 'blur' },
],
profitRemark: [
{ max: 1000, message: '盈利模式及利润测算情况说明不能超过1000个字符', trigger: 'blur' },
],
riskPoint: [
{ max: 1000, message: '项目风险点不能超过1000个字符', trigger: 'blur' },
],
emergencyPlan: [
{ max: 1000, message: '风险防范措施及应急预案不能超过1000个字符', trigger: 'blur' },
],
}, },
deptOptions: [], deptOptions: [],
businessDeptTreeOptions: [], businessDeptTreeOptions: [],
+3 -1
View File
@@ -51,7 +51,7 @@
<el-option <el-option
v-for="item in contractOptions" v-for="item in contractOptions"
:key="item.id" :key="item.id"
:label="item.contractName" :label="formatContractOptionLabel(item)"
:value="item.id" :value="item.id"
/> />
</el-select> </el-select>
@@ -165,6 +165,7 @@ import { getList as getContractList } from '@/api/business/contract-manage';
import { getList as getProjectList } from '@/api/business/project-apply'; import { getList as getProjectList } from '@/api/business/project-apply';
import { importTransportPlan, validateTransportPlan } from '@/api/business/transport-plan'; import { importTransportPlan, validateTransportPlan } from '@/api/business/transport-plan';
import { config } from '@/option/business/transport-plan'; import { config } from '@/option/business/transport-plan';
import { formatContractOptionLabel } from '@/utils/contract';
import { downloadXls } from '@/utils/util'; import { downloadXls } from '@/utils/util';
import dayjs from 'dayjs'; import dayjs from 'dayjs';
@@ -271,6 +272,7 @@ export default {
this.loadProjectOptions(); this.loadProjectOptions();
}, },
methods: { methods: {
formatContractOptionLabel,
loadProjectOptions() { loadProjectOptions() {
if (this.projectLoading) return; if (this.projectLoading) return;
this.projectLoading = true; this.projectLoading = true;
@@ -100,7 +100,7 @@
<el-option <el-option
v-for="item in contractOptions" v-for="item in contractOptions"
:key="item.id" :key="item.id"
:label="item.contractName || item.contractNo" :label="formatContractOptionLabel(item)"
:value="item.id" :value="item.id"
/> />
</el-select> </el-select>
@@ -661,6 +661,7 @@ import {
getList as getCustomerArchiveList, getList as getCustomerArchiveList,
} from '@/api/vehicle/customer-archive'; } from '@/api/vehicle/customer-archive';
import { readSettlementTransfer, removeSettlementTransfer } from '@/utils/settlement-transfer'; import { readSettlementTransfer, removeSettlementTransfer } from '@/utils/settlement-transfer';
import { formatContractOptionLabel } from '@/utils/contract';
import { downloadFileByUrl } from '@/utils/util'; import { downloadFileByUrl } from '@/utils/util';
import { submitMkApprovalFlow } from '@/utils/mk-approval'; import { submitMkApprovalFlow } from '@/utils/mk-approval';
import PdfPreview from '@/components/pdf-preview/main.vue'; import PdfPreview from '@/components/pdf-preview/main.vue';
@@ -1021,6 +1022,7 @@ export default {
this.initialize(); this.initialize();
}, },
methods: { methods: {
formatContractOptionLabel,
hasPermission(code) { hasPermission(code) {
return this.permission?.[code] !== false; return this.permission?.[code] !== false;
}, },
@@ -52,7 +52,7 @@
<el-option <el-option
v-for="item in contracts" v-for="item in contracts"
:key="item.id" :key="item.id"
:label="`${item.contractNo} / ${item.contractName}`" :label="formatContractOptionLabel(item)"
:value="item.id" :value="item.id"
/> />
</el-select> </el-select>
@@ -980,6 +980,7 @@ import { getDictionary } from '@/api/system/dictbiz';
import { h } from 'vue'; import { h } from 'vue';
import { InfoFilled } from '@element-plus/icons-vue'; import { InfoFilled } from '@element-plus/icons-vue';
import { mapGetters } from 'vuex'; import { mapGetters } from 'vuex';
import { formatContractOptionLabel } from '@/utils/contract';
import { downloadFileByUrl } from '@/utils/util'; import { downloadFileByUrl } from '@/utils/util';
import * as XLSX from 'xlsx'; import * as XLSX from 'xlsx';
@@ -1215,6 +1216,7 @@ export default {
}, },
}, },
methods: { methods: {
formatContractOptionLabel,
async loadFormalDetail(id) { async loadFormalDetail(id) {
const response = this.publicMode const response = this.publicMode
? await getMkPublicDetail('formal-settlement', id) ? await getMkPublicDetail('formal-settlement', id)
@@ -20,7 +20,7 @@
<el-form-item :label="field.label" :prop="field.prop"> <el-form-item :label="field.label" :prop="field.prop">
<el-input <el-input
v-if="field.type === 'contract'" v-if="field.type === 'contract'"
v-model="form.contractName" :model-value="formatContractOptionLabel(form)"
readonly readonly
:disabled="!editable || details.length > 0" :disabled="!editable || details.length > 0"
placeholder="请选择合同" placeholder="请选择合同"
@@ -962,6 +962,7 @@ import {
settlementDetailColumns, settlementDetailColumns,
settlementSummaryColumns, settlementSummaryColumns,
} from '@/option/settlement/preSettlementTable'; } from '@/option/settlement/preSettlementTable';
import { formatContractOptionLabel } from '@/utils/contract';
import { downloadFileByUrl } from '@/utils/util'; import { downloadFileByUrl } from '@/utils/util';
import { submitMkApprovalFlow } from '@/utils/mk-approval'; import { submitMkApprovalFlow } from '@/utils/mk-approval';
import * as XLSX from 'xlsx'; import * as XLSX from 'xlsx';
@@ -1265,6 +1266,7 @@ export default {
}, },
}, },
methods: { methods: {
formatContractOptionLabel,
hasPermission(code) { hasPermission(code) {
return this.isAdmin || this.validData(this.permission?.[code], false); return this.isAdmin || this.validData(this.permission?.[code], false);
}, },
@@ -957,6 +957,7 @@ import { getContractOptions as getSettlementContractOptions } from '@/api/settle
import { getList as getCargoTypeList } from '@/api/base/cargo-type'; import { getList as getCargoTypeList } from '@/api/base/cargo-type';
import { exportBlob } from '@/api/common'; import { exportBlob } from '@/api/common';
import { getDictionary } from '@/api/system/dictbiz'; import { getDictionary } from '@/api/system/dictbiz';
import { formatContractOptionLabel } from '@/utils/contract';
import { downloadXls } from '@/utils/util'; import { downloadXls } from '@/utils/util';
import { createSettlementTransfer } from '@/utils/settlement-transfer'; import { createSettlementTransfer } from '@/utils/settlement-transfer';
import { import {
@@ -1103,14 +1104,14 @@ export default {
const contract = this.contractOptions.find( const contract = this.contractOptions.find(
item => String(item.id) === String(this.generateQuery.contractId) item => String(item.id) === String(this.generateQuery.contractId)
); );
return contract?.contractName || ''; return formatContractOptionLabel(contract);
}, },
updateContractName() { updateContractName() {
const contractId = this.updateFeeForm.contractId; const contractId = this.updateFeeForm.contractId;
const contract = [...this.updateContractOptions, ...this.contractOptions].find( const contract = [...this.updateContractOptions, ...this.contractOptions].find(
item => String(item.id) === String(contractId) item => String(item.id) === String(contractId)
); );
return contract?.contractName || ''; return formatContractOptionLabel(contract);
}, },
generateContractCategory() { generateContractCategory() {
return this.settlementType === 'payable' ? '承运商合同' : '客户合同'; return this.settlementType === 'payable' ? '承运商合同' : '客户合同';
+8 -5
View File
@@ -1292,17 +1292,20 @@ export default {
handleExport() { handleExport() {
const account = func.toStr(this.search.account); const account = func.toStr(this.search.account);
const realName = func.toStr(this.search.realName); const realName = func.toStr(this.search.realName);
const phone = func.toStr(this.search.phone);
this.$confirm('是否导出用户数据?', '提示', { this.$confirm('是否导出用户数据?', '提示', {
confirmButtonText: '确定', confirmButtonText: '确定',
cancelButtonText: '取消', cancelButtonText: '取消',
type: 'warning', type: 'warning',
}).then(() => { }).then(() => {
NProgress.start(); NProgress.start();
exportBlob( const params = new URLSearchParams({
`/blade-system/user/export-user?${ [this.website.tokenHeader]: getToken(),
this.website.tokenHeader });
}=${getToken()}&account=${account}&realName=${realName}` if (account) params.set('account', account);
).then(res => { if (realName) params.set('realName', realName);
if (phone) params.set('phone', phone);
exportBlob(`/blade-system/user/export-user?${params.toString()}`).then(res => {
downloadXls(res.data, `用户数据表${this.$dayjs().format('YYYY-MM-DD')}.xlsx`); downloadXls(res.data, `用户数据表${this.$dayjs().format('YYYY-MM-DD')}.xlsx`);
NProgress.done(); NProgress.done();
}); });