wuguojie před 11 měsíci
rodič
revize
9d682f74e9

+ 151 - 2
pnpm-lock.yaml

@@ -28,7 +28,7 @@ importers:
         version: 12.0.0(typescript@5.6.3)
       '@vueuse/integrations':
         specifier: ^12.0.0
-        version: 12.0.0(async-validator@4.2.5)(axios@1.7.9)(nprogress@0.2.0)(typescript@5.6.3)
+        version: 12.0.0(async-validator@4.2.5)(axios@1.7.9)(nprogress@0.2.0)(qrcode@1.5.4)(typescript@5.6.3)
       axios:
         specifier: ^1.7.9
         version: 1.7.9
@@ -47,6 +47,9 @@ importers:
       eruda:
         specifier: ^3.4.1
         version: 3.4.1
+      file-saver:
+        specifier: ^2.0.5
+        version: 2.0.5
       floating-vue:
         specifier: 5.2.2
         version: 5.2.2(vue@3.5.13(typescript@5.6.3))
@@ -56,6 +59,9 @@ importers:
       js-pinyin:
         specifier: ^0.2.7
         version: 0.2.7
+      jszip:
+        specifier: ^3.10.1
+        version: 3.10.1
       lodash-es:
         specifier: ^4.17.21
         version: 4.17.21
@@ -83,6 +89,12 @@ importers:
       pinia:
         specifier: ^2.3.0
         version: 2.3.0(typescript@5.6.3)(vue@3.5.13(typescript@5.6.3))
+      qrcode:
+        specifier: ^1.5.4
+        version: 1.5.4
+      qrcode.vue:
+        specifier: ^3.6.0
+        version: 3.6.0(vue@3.5.13(typescript@5.6.3))
       qs:
         specifier: ^6.13.1
         version: 6.13.1
@@ -2328,6 +2340,10 @@ packages:
   camel-case@4.1.2:
     resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==}
 
+  camelcase@5.3.1:
+    resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==}
+    engines: {node: '>=6'}
+
   camelcase@8.0.0:
     resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==}
     engines: {node: '>=16'}
@@ -2424,6 +2440,9 @@ packages:
     resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==}
     engines: {node: '>= 12'}
 
+  cliui@6.0.0:
+    resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==}
+
   cliui@8.0.1:
     resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
     engines: {node: '>=12'}
@@ -2827,6 +2846,10 @@ packages:
       supports-color:
         optional: true
 
+  decamelize@1.2.0:
+    resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==}
+    engines: {node: '>=0.10.0'}
+
   decode-named-character-reference@1.0.2:
     resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==}
 
@@ -2893,6 +2916,9 @@ packages:
   devlop@1.1.0:
     resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==}
 
+  dijkstrajs@1.0.3:
+    resolution: {integrity: sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==}
+
   dir-glob@3.0.1:
     resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
     engines: {node: '>=8'}
@@ -3353,6 +3379,9 @@ packages:
     resolution: {integrity: sha512-/pqPFG+FdxWQj+/WSuzXSDaNzxgTLr/OrR1QuqfEZzDakpdYE70PwUxL7BPUa8hpjbvY1+qvCl8k+8Tq34xJgg==}
     engines: {node: '>=18'}
 
+  file-saver@2.0.5:
+    resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==}
+
   filesize@10.1.6:
     resolution: {integrity: sha512-sJslQKU2uM33qH5nqewAwVB2QgR6w1aMNsYUp3aN5rMRyXEwJGmZvaWzeJFNTOXWlHQyBFCWrdj3fV/fsTOX8w==}
     engines: {node: '>= 10.4.0'}
@@ -3721,6 +3750,9 @@ packages:
     engines: {node: '>=0.10.0'}
     hasBin: true
 
+  immediate@3.0.6:
+    resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==}
+
   immutable@4.3.7:
     resolution: {integrity: sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==}
 
@@ -4058,6 +4090,9 @@ packages:
   jsonfile@6.1.0:
     resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==}
 
+  jszip@3.10.1:
+    resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==}
+
   keyv@4.5.4:
     resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
 
@@ -4098,6 +4133,9 @@ packages:
     resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
     engines: {node: '>= 0.8.0'}
 
+  lie@3.3.0:
+    resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==}
+
   liftoff@4.0.0:
     resolution: {integrity: sha512-rMGwYF8q7g2XhG2ulBmmJgWv25qBsqRbDn5gH0+wnuyeFt7QBJlHJmtg5qEdn4pN6WVAUMgXnIxytMFRX9c1aA==}
     engines: {node: '>=10.13.0'}
@@ -4699,6 +4737,9 @@ packages:
   package-manager-detector@0.2.7:
     resolution: {integrity: sha512-g4+387DXDKlZzHkP+9FLt8yKj8+/3tOkPv7DVTJGGRm00RkEWgqbFstX1mXJ4M0VDYhUqsTOiISqNOJnhAu3PQ==}
 
+  pako@1.0.11:
+    resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==}
+
   param-case@3.0.4:
     resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==}
 
@@ -4835,6 +4876,10 @@ packages:
     resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==}
     engines: {node: '>=4'}
 
+  pngjs@5.0.0:
+    resolution: {integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==}
+    engines: {node: '>=10.13.0'}
+
   portfinder@1.0.32:
     resolution: {integrity: sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==}
     engines: {node: '>= 0.12.0'}
@@ -4965,6 +5010,16 @@ packages:
     resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
     engines: {node: '>=6'}
 
+  qrcode.vue@3.6.0:
+    resolution: {integrity: sha512-vQcl2fyHYHMjDO1GguCldJxepq2izQjBkDEEu9NENgfVKP6mv/e2SU62WbqYHGwTgWXLhxZ1NCD1dAZKHQq1fg==}
+    peerDependencies:
+      vue: ^3.0.0
+
+  qrcode@1.5.4:
+    resolution: {integrity: sha512-1ca71Zgiu6ORjHqFBDpnSMTR2ReToX4l1Au1VFLyVeBTFavzQnv5JxMFr3ukHVKpSrSA2MCk0lNJSykjUfz7Zg==}
+    engines: {node: '>=10.13.0'}
+    hasBin: true
+
   qs@6.13.1:
     resolution: {integrity: sha512-EJPeIn0CYrGu+hli1xilKAPXODtJ12T0sP63Ijx2/khC2JtuaN3JyNIpvmnkmaEtha9ocbG4A4cMcr+TvqvwQg==}
     engines: {node: '>=0.6'}
@@ -5086,6 +5141,9 @@ packages:
     resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
     engines: {node: '>=0.10.0'}
 
+  require-main-filename@2.0.0:
+    resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==}
+
   requires-port@1.0.0:
     resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==}
 
@@ -5331,6 +5389,9 @@ packages:
   sentence-case@3.0.4:
     resolution: {integrity: sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==}
 
+  set-blocking@2.0.0:
+    resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==}
+
   set-function-length@1.2.2:
     resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
     engines: {node: '>= 0.4'}
@@ -5339,6 +5400,9 @@ packages:
     resolution: {integrity: sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==}
     engines: {node: '>=0.10.0'}
 
+  setimmediate@1.0.5:
+    resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==}
+
   shebang-command@2.0.0:
     resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
     engines: {node: '>=8'}
@@ -6190,6 +6254,9 @@ packages:
     resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==}
     engines: {node: '>=12'}
 
+  which-module@2.0.1:
+    resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==}
+
   which@1.3.1:
     resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==}
     hasBin: true
@@ -6242,6 +6309,9 @@ packages:
     resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==}
     engines: {node: '>=12'}
 
+  y18n@4.0.3:
+    resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==}
+
   y18n@5.0.8:
     resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
     engines: {node: '>=10'}
@@ -6269,10 +6339,18 @@ packages:
     engines: {node: '>= 14'}
     hasBin: true
 
+  yargs-parser@18.1.3:
+    resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==}
+    engines: {node: '>=6'}
+
   yargs-parser@21.1.1:
     resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
     engines: {node: '>=12'}
 
+  yargs@15.4.1:
+    resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==}
+    engines: {node: '>=8'}
+
   yargs@17.7.2:
     resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
     engines: {node: '>=12'}
@@ -8245,7 +8323,7 @@ snapshots:
       - '@vue/composition-api'
       - vue
 
-  '@vueuse/integrations@12.0.0(async-validator@4.2.5)(axios@1.7.9)(nprogress@0.2.0)(typescript@5.6.3)':
+  '@vueuse/integrations@12.0.0(async-validator@4.2.5)(axios@1.7.9)(nprogress@0.2.0)(qrcode@1.5.4)(typescript@5.6.3)':
     dependencies:
       '@vueuse/core': 12.0.0(typescript@5.6.3)
       '@vueuse/shared': 12.0.0(typescript@5.6.3)
@@ -8254,6 +8332,7 @@ snapshots:
       async-validator: 4.2.5
       axios: 1.7.9
       nprogress: 0.2.0
+      qrcode: 1.5.4
     transitivePeerDependencies:
       - typescript
 
@@ -8630,6 +8709,8 @@ snapshots:
       pascal-case: 3.1.2
       tslib: 2.7.0
 
+  camelcase@5.3.1: {}
+
   camelcase@8.0.0: {}
 
   caniuse-lite@1.0.30001647: {}
@@ -8740,6 +8821,12 @@ snapshots:
 
   cli-width@4.1.0: {}
 
+  cliui@6.0.0:
+    dependencies:
+      string-width: 4.2.3
+      strip-ansi: 6.0.1
+      wrap-ansi: 6.2.0
+
   cliui@8.0.1:
     dependencies:
       string-width: 4.2.3
@@ -8943,6 +9030,8 @@ snapshots:
     dependencies:
       ms: 2.1.3
 
+  decamelize@1.2.0: {}
+
   decode-named-character-reference@1.0.2:
     dependencies:
       character-entities: 2.0.2
@@ -9008,6 +9097,8 @@ snapshots:
     dependencies:
       dequal: 2.0.3
 
+  dijkstrajs@1.0.3: {}
+
   dir-glob@3.0.1:
     dependencies:
       path-type: 4.0.0
@@ -9635,6 +9726,8 @@ snapshots:
     dependencies:
       flat-cache: 5.0.0
 
+  file-saver@2.0.5: {}
+
   filesize@10.1.6: {}
 
   fill-range@4.0.0:
@@ -10034,6 +10127,8 @@ snapshots:
 
   image-size@0.5.5: {}
 
+  immediate@3.0.6: {}
+
   immutable@4.3.7:
     optional: true
 
@@ -10318,6 +10413,13 @@ snapshots:
     optionalDependencies:
       graceful-fs: 4.2.11
 
+  jszip@3.10.1:
+    dependencies:
+      lie: 3.3.0
+      pako: 1.0.11
+      readable-stream: 2.3.8
+      setimmediate: 1.0.5
+
   keyv@4.5.4:
     dependencies:
       json-buffer: 3.0.1
@@ -10354,6 +10456,10 @@ snapshots:
       prelude-ls: 1.2.1
       type-check: 0.4.0
 
+  lie@3.3.0:
+    dependencies:
+      immediate: 3.0.6
+
   liftoff@4.0.0:
     dependencies:
       extend: 3.0.2
@@ -11161,6 +11267,8 @@ snapshots:
 
   package-manager-detector@0.2.7: {}
 
+  pako@1.0.11: {}
+
   param-case@3.0.4:
     dependencies:
       dot-case: 3.0.4
@@ -11280,6 +11388,8 @@ snapshots:
 
   pluralize@8.0.0: {}
 
+  pngjs@5.0.0: {}
+
   portfinder@1.0.32:
     dependencies:
       async: 2.6.4
@@ -11408,6 +11518,16 @@ snapshots:
 
   punycode@2.3.1: {}
 
+  qrcode.vue@3.6.0(vue@3.5.13(typescript@5.6.3)):
+    dependencies:
+      vue: 3.5.13(typescript@5.6.3)
+
+  qrcode@1.5.4:
+    dependencies:
+      dijkstrajs: 1.0.3
+      pngjs: 5.0.0
+      yargs: 15.4.1
+
   qs@6.13.1:
     dependencies:
       side-channel: 1.0.6
@@ -11541,6 +11661,8 @@ snapshots:
 
   require-from-string@2.0.2: {}
 
+  require-main-filename@2.0.0: {}
+
   requires-port@1.0.0: {}
 
   resolve-dir@1.0.1:
@@ -11759,6 +11881,8 @@ snapshots:
       tslib: 2.7.0
       upper-case-first: 2.0.2
 
+  set-blocking@2.0.0: {}
+
   set-function-length@1.2.2:
     dependencies:
       define-data-property: 1.1.4
@@ -11775,6 +11899,8 @@ snapshots:
       is-plain-object: 2.0.4
       split-string: 3.1.0
 
+  setimmediate@1.0.5: {}
+
   shebang-command@2.0.0:
     dependencies:
       shebang-regex: 3.0.0
@@ -12734,6 +12860,8 @@ snapshots:
     dependencies:
       iconv-lite: 0.6.3
 
+  which-module@2.0.1: {}
+
   which@1.3.1:
     dependencies:
       isexe: 2.0.0
@@ -12787,6 +12915,8 @@ snapshots:
 
   xml-name-validator@4.0.0: {}
 
+  y18n@4.0.3: {}
+
   y18n@5.0.8: {}
 
   yallist@2.1.2: {}
@@ -12805,8 +12935,27 @@ snapshots:
 
   yaml@2.6.1: {}
 
+  yargs-parser@18.1.3:
+    dependencies:
+      camelcase: 5.3.1
+      decamelize: 1.2.0
+
   yargs-parser@21.1.1: {}
 
+  yargs@15.4.1:
+    dependencies:
+      cliui: 6.0.0
+      decamelize: 1.2.0
+      find-up: 4.1.0
+      get-caller-file: 2.0.5
+      require-directory: 2.1.1
+      require-main-filename: 2.0.0
+      set-blocking: 2.0.0
+      string-width: 4.2.3
+      which-module: 2.0.1
+      y18n: 4.0.3
+      yargs-parser: 18.1.3
+
   yargs@17.7.2:
     dependencies:
       cliui: 8.0.1

+ 17 - 0
src/api/modules/settlement.ts

@@ -4,6 +4,23 @@ const settlementApi = (axiosInstance: ApiInstance) => ({
     companySuperviseSettlementReport: (data: any) => axiosInstance.post('/receivable/companySuperviseSettlementReport', data), // 保险公司报表
     superviseSettlementExcel: (data: any) => axiosInstance.post('/receivable/superviseSettlementExcel',data), // 结算记录
     superviseSettlementDetailExcel: (data: any) => axiosInstance.post('/receivable/superviseSettlementDetailExcel',data), // 结算明细
+
+    exportSuperviseSettlementExcel: (data: any) => axiosInstance.post('/receivable/exportSuperviseSettlementExcel', data, {responseType: 'blob'}), // 手续费结算报表导出
+    exportSuperviseSettlementDetailExcel: (data: any) => axiosInstance.post('/receivable/exportSuperviseSettlementDetailExcel', data, {responseType: 'blob'}), // 手续费车险结算报表导出
+    exportSuperviseSettlementDetailJyExcel: (data: any) => axiosInstance.post('/receivable/exportSuperviseSettlementDetailJyExcel', data, {responseType: 'blob'}), // 手续费非车险结算报表导出
+
+    exportOtherSettlementExcel: (data: any) => axiosInstance.post('/receivable/exportOtherSettlementExcel', data, {responseType: 'blob'}), // 跟单费结算报表导出
+    exportOtherExcel: (data: any) => axiosInstance.post('/receivable/exportOtherExcel', data, {responseType: 'blob'}), // 跟单费车险应收导出
+    exportOtherJyExcel: (data: any) => axiosInstance.post('/receivable/exportOtherJyExcel', data, {responseType: 'blob'}), // 跟单费非车险应收导出
+
+    exportOtherSettlementDetailExcel: (data: any) => axiosInstance.post('/receivable/exportOtherSettlementDetailExcel', data, {responseType: 'blob'}), // 跟单费非车险结算报表导出
+    exportOtherSettlementDetailJyExcel: (data: any) => axiosInstance.post('/receivable/exportOtherSettlementDetailJyExcel', data, {responseType: 'blob'}), // 跟单费非车险结算报表导出
+
+    receiverSettlementReport: (data: any) => axiosInstance.post('/receivable/receiverSettlementReport', data), // 平台对接人结算报表
+    exportReceiverSettlementReportExcel: (data: any) => axiosInstance.post('/receivable/exportReceiverSettlementReportExcel', data, {
+        responseType: 'blob'
+    }), // 平台对接人导出
+
 })
 
 export default settlementApi

+ 21 - 0
src/router/modules/quoteConfig.ts

@@ -105,6 +105,27 @@ const routes: RouteRecordRaw = {
         }
       ]
     },
+    {
+      path: 'dispatch',
+      name: 'Dispatch',
+      component: () => import('@/views/quoteConfig/dispatch/index.vue'),
+      meta: {
+        title: '协议调度',
+        // auth:['role.add','role.view','role.delete','role.edit']
+      },
+      // children: [
+      //   {
+      //     path: 'projectAdd',
+      //     name: 'ProjectAdd',
+      //     component: () => import('@/views/quoteConfig/project/modules/projectAdd.vue'),
+      //     meta: {
+      //       title: '方案管理',
+      //       menu: false,
+      //       // auth: []
+      //     },
+      //   }
+      // ]
+    },
   ],
 }
 

+ 60 - 17
src/views/platform/platformReport.vue

@@ -35,6 +35,7 @@
                     </el-row>
                 </el-form>
                 <el-table
+                    style="margin-top: 20px"
                     class="tableBox"
                     :data="recordData"
                     row-key="companyId"
@@ -60,7 +61,7 @@
                     </el-table-column>
                 </el-table>
             </el-tab-pane>
-            <el-tab-pane style="height: 100%" name="2" label="结算记录">
+            <el-tab-pane style="height: 100%" name="2" label="对接人结算报表">
                 <el-form v-model="recordForm1" label-width="120">
                     <el-row :gutter="20">
                         <el-col :span="8">
@@ -88,30 +89,31 @@
                         <el-col :span="8" style="display: flex; justify-content: flex-end">
                             <el-button type="primary" @click="handleSearch(2)">查询</el-button>
                             <el-button plain type="primary" @click="handleReset(2)">重置</el-button>
-                            <el-button type="primary">导出结算记录</el-button>
+                            <el-button type="primary" @click="handleExport">导出结算记录</el-button>
                         </el-col>
                     </el-row>
                 </el-form>
                 <el-table
                     class="tableRecord"
+                    style="margin-top: 20px"
                     :data="recordData1"
                 >
-                    <el-table-column prop="invoiceParty" label="对接人" width="150"></el-table-column>
+                    <el-table-column prop="receiver" label="对接人" width="150"></el-table-column>
                     <el-table-column prop="companyName" label="保险公司" width="200"></el-table-column>
                     <el-table-column label="应收">
-                        <el-table-column prop="signingTime" label="总计" width="150"></el-table-column>
-                        <el-table-column prop="licenseNo" label="手续费" width="150"></el-table-column>
-                        <el-table-column prop="productName" label="跟单费" width="150"></el-table-column>
+                        <el-table-column prop="totalReceivable" label="总计" width="150"></el-table-column>
+                        <el-table-column prop="superviseFee" label="手续费" width="150"></el-table-column>
+                        <el-table-column prop="followFee" label="跟单费" width="150"></el-table-column>
                     </el-table-column>
                     <el-table-column label="已结算">
-                        <el-table-column prop="receivableSuperviseCosts" label="总计" width="150"></el-table-column>
-                        <el-table-column prop="jqPremium" label="手续费" width="150"></el-table-column>
-                        <el-table-column prop="taxPremium" label="跟单费" width="150"></el-table-column>
+                        <el-table-column prop="settledAmount" label="总计" width="150"></el-table-column>
+                        <el-table-column prop="settledSuperviseFee" label="手续费" width="150"></el-table-column>
+                        <el-table-column prop="settledFollowFee" label="跟单费" width="150"></el-table-column>
                     </el-table-column>
                     <el-table-column label="未结算">
-                        <el-table-column prop="jqSuperviseCostsProportion" label="总计" width="150"></el-table-column>
-                        <el-table-column prop="a" label="手续费" width="150"></el-table-column>
-                        <el-table-column prop="syPremium" label="跟单费" width="150"></el-table-column>
+                        <el-table-column prop="unSettledAmount" label="总计" width="150"></el-table-column>
+                        <el-table-column prop="unSettledSuperviseFee" label="手续费" width="150"></el-table-column>
+                        <el-table-column prop="unSettledFollowFee" label="跟单费" width="150"></el-table-column>
                     </el-table-column>
                 </el-table>
                 <div class="pagination">
@@ -171,12 +173,13 @@
                         <el-col :span="24" style="display: flex; justify-content: flex-end">
                             <el-button type="primary" @click="handleSearch(3)">查询</el-button>
                             <el-button plain type="primary" @click="handleReset(3)">重置</el-button>
-                            <el-button type="primary">导出明细</el-button>
+                            <el-button type="primary" @click="handleExport1">导出明细</el-button>
                         </el-col>
                     </el-row>
                 </el-form>
                 <el-table
                     class="tableRecord"
+                    style="margin-top: 20px"
                     :data="recordData2"
                 >
                     <el-table-column prop="settlementId" label="结算记录编号" width="200"></el-table-column>
@@ -316,7 +319,7 @@ const initData1 = () => {
         startTime: recordForm.value.time?.[0],
         endTime: recordForm.value.time?.[1],
         status: recordForm.value.status,
-        invoiceTypes: ['2','4']
+        agreementType: '1'
     }).then((res: any) => {
         if(res.code == 200) {
             recordData.value = res.data
@@ -324,7 +327,7 @@ const initData1 = () => {
     })
 }
 const initData2 = () => {
-    api.settlementApi.superviseSettlementExcel({
+    api.settlementApi.receiverSettlementReport({
         settlementId: recordForm1.settlementId,
         companyId: recordForm1.companyId,
         invoiceParty: recordForm1.invoiceParty,
@@ -355,11 +358,11 @@ const initData3 = (invoiceTypes) => {
         settlementTimeEnd: recordForm2.value.settlementTime?.[1],
         pages: pages.value,
         size: size.value,
-        invoiceTypes: invoiceTypes
+        invoiceTypes: invoiceTypes,
+        agreementType: '1'
     }).then((res: any) => {
         if(res.code == 200) {
             recordData2.value = res.data.records
-            recordData3.value = res.data.records
             total2.value = res.data.total
         }
     })
@@ -401,6 +404,46 @@ const handleSearch = (type) => {
 const handleReset = (type) => {
 
 }
+const handleExport = () => {
+    api.settlementApi.exportReceiverSettlementReportExcel({
+
+    }).then((res: any) => {
+        const blob = new Blob([res], { type: 'application/vnd.ms-excel' });
+        const fileName = '平台对接人结算报表' + new Date().getTime() + '.xlsx';
+        if ('download' in document.createElement('a')) {
+            const elink = document.createElement('a');
+            elink.download = fileName;
+            elink.style.display = 'none';
+            elink.href = URL.createObjectURL(blob);
+            document.body.appendChild(elink);
+            elink.click();
+            URL.revokeObjectURL(elink.href);
+            document.body.removeChild(elink);
+        } else {
+            navigator.msSaveBlob(blob, fileName);
+        }
+    })
+}
+const handleExport1 = () => {
+    api.financeApi.exportSuperviseExcel({
+        agreementType: '1'
+    }).then((res: any) => {
+        const blob = new Blob([res], { type: 'application/vnd.ms-excel' });
+        const fileName = '平台协议应收明细' + new Date().getTime() + '.xlsx';
+        if ('download' in document.createElement('a')) {
+            const elink = document.createElement('a');
+            elink.download = fileName;
+            elink.style.display = 'none';
+            elink.href = URL.createObjectURL(blob);
+            document.body.appendChild(elink);
+            elink.click();
+            URL.revokeObjectURL(elink.href);
+            document.body.removeChild(elink);
+        } else {
+            navigator.msSaveBlob(blob, fileName);
+        }
+    })
+}
 
 onMounted(() => {
     initData1();

+ 1 - 7
src/views/quoteConfig/project/modules/projectAdd.vue

@@ -614,13 +614,7 @@ const initEdit = () => {
           })
         })
         projectAddFrom.value = res.data
-        rulesAttrList.value = res.data.ruleAttrs.map(a => {
-            return {
-                ...a,
-                min: a.attrName == '能源类型'? '0':'',
-                minArray: a.attrName == '使用性质' || a.attrName == '车辆种类'?[a.dictLabal[0].code]:[]
-            }
-        })
+        rulesAttrList.value = res.data.ruleAttrs
       }
     } else {
       ElMessage({

+ 81 - 4
src/views/receivable/documentary/documentaryReport.vue

@@ -119,7 +119,7 @@
                         <el-col :span="8" style="display: flex; justify-content: flex-end">
                             <el-button type="primary" @click="handleSearch(2)">查询</el-button>
                             <el-button plain type="primary" @click="handleReset(2)">重置</el-button>
-                            <el-button type="primary">导出结算记录</el-button>
+                            <el-button type="primary" @click="handleExport(2)">导出结算记录</el-button>
                         </el-col>
                     </el-row>
                 </el-form>
@@ -202,7 +202,7 @@
                         <el-col :span="24" style="display: flex; justify-content: flex-end">
                             <el-button type="primary" @click="handleSearch(3)">查询</el-button>
                             <el-button plain type="primary" @click="handleReset(3)">重置</el-button>
-                            <el-button type="primary">导出明细</el-button>
+                            <el-button type="primary" @click="handleExport(3)">导出明细</el-button>
                         </el-col>
                     </el-row>
                 </el-form>
@@ -289,7 +289,7 @@
                         <el-col :span="24" style="display: flex; justify-content: flex-end">
                             <el-button type="primary" @click="handleSearch(4)">查询</el-button>
                             <el-button plain type="primary" @click="handleReset(4)">重置</el-button>
-                            <el-button type="primary">导出明细</el-button>
+                            <el-button type="primary" @click="handleExport(4)">导出明细</el-button>
                         </el-col>
                     </el-row>
                 </el-form>
@@ -446,7 +446,8 @@ const initData1 = () => {
         startTime: recordForm.value.time?.[0],
         endTime: recordForm.value.time?.[1],
         status: recordForm.value.status,
-        invoiceTypes: ['2','4']
+        invoiceTypes: ['2','4'],
+        agreementType: '2'
     }).then((res: any) => {
         if(res.code == 200) {
             recordData.value = res.data
@@ -575,6 +576,82 @@ const handleReset = (type) => {
     }
 }
 
+const handleExport = (type) => {
+    switch (type) {
+        case 2:
+            exportOtherSettlementExcel()
+            break;
+        case 3:
+            exportOtherSettlementDetailExcel()
+            break;
+        case 4:
+            exportOtherSettlementDetailJyExcel()
+            break;
+    }
+}
+
+const exportOtherSettlementExcel = () => {
+    api.settlementApi.exportOtherSettlementExcel({
+
+    }).then((res: any) => {
+        const blob = new Blob([res], { type: 'application/vnd.ms-excel' });
+        const fileName = '跟单费应收结算报表明细' + new Date().getTime() + '.xlsx';
+        if ('download' in document.createElement('a')) {
+            const elink = document.createElement('a');
+            elink.download = fileName;
+            elink.style.display = 'none';
+            elink.href = URL.createObjectURL(blob);
+            document.body.appendChild(elink);
+            elink.click();
+            URL.revokeObjectURL(elink.href);
+            document.body.removeChild(elink);
+        } else {
+            navigator.msSaveBlob(blob, fileName);
+        }
+    })
+}
+const exportOtherSettlementDetailExcel = () => {
+    api.settlementApi.exportOtherSettlementDetailExcel({
+
+    }).then((res: any) => {
+        const blob = new Blob([res], { type: 'application/vnd.ms-excel' });
+        const fileName = '跟单费应收结算报表明细' + new Date().getTime() + '.xlsx';
+        if ('download' in document.createElement('a')) {
+            const elink = document.createElement('a');
+            elink.download = fileName;
+            elink.style.display = 'none';
+            elink.href = URL.createObjectURL(blob);
+            document.body.appendChild(elink);
+            elink.click();
+            URL.revokeObjectURL(elink.href);
+            document.body.removeChild(elink);
+        } else {
+            navigator.msSaveBlob(blob, fileName);
+        }
+    })
+}
+const exportOtherSettlementDetailJyExcel = () => {
+    api.settlementApi.exportOtherSettlementDetailJyExcel({
+
+    }).then((res: any) => {
+        const blob = new Blob([res], { type: 'application/vnd.ms-excel' });
+        const fileName = '跟单费应收结算报表明细' + new Date().getTime() + '.xlsx';
+        if ('download' in document.createElement('a')) {
+            const elink = document.createElement('a');
+            elink.download = fileName;
+            elink.style.display = 'none';
+            elink.href = URL.createObjectURL(blob);
+            document.body.appendChild(elink);
+            elink.click();
+            URL.revokeObjectURL(elink.href);
+            document.body.removeChild(elink);
+        } else {
+            navigator.msSaveBlob(blob, fileName);
+        }
+    })
+}
+
+
 onMounted(() => {
     initData1();
     initCompany();

+ 53 - 2
src/views/receivable/documentary/index.vue

@@ -140,7 +140,7 @@
                         <el-button class="radius-2px width-100" type="primary" @click="invoiceShow = true">应收开票</el-button>
                     </div>
                     <div class="col-108 m-r-8">
-                        <el-button class="radius-2px width-100" type="primary">导出</el-button>
+                        <el-button class="radius-2px width-100" type="primary" @click="handleExport(1)">导出</el-button>
                     </div>
                     <span class="col-108 m-r-8">
                         <el-dropdown class="width-100" trigger="click" placement="bottom" @command="dropdownCommand">
@@ -341,7 +341,7 @@
                         <el-button class="radius-2px width-100" type="primary"@click="handleInvoice">应收开票</el-button>
                     </div>
                     <div class="col-108 m-r-8">
-                        <el-button class="radius-2px width-100" type="primary">导出</el-button>
+                        <el-button class="radius-2px width-100" type="primary" @click="handleExport(2)">导出</el-button>
                     </div>
                     <span class="col-108 m-r-8">
                         <el-button class="radius-2px width-100" @click="handleBatchEdit">批量修改比例</el-button>
@@ -977,6 +977,57 @@ const getJyOtherReceivableList = () => {
     })
 }
 
+const handleExport = (type) => {
+    switch (type) {
+        case 1:
+            exportOtherExcel()
+            break;
+        case 2:
+            exportOtherJyExcel()
+            break;
+    }
+}
+const exportOtherExcel = () => {
+    api.settlementApi.exportOtherExcel({
+
+    }).then((res: any) => {
+        const blob = new Blob([res], { type: 'application/vnd.ms-excel' });
+        const fileName = '跟单费应收车险结算报表明细' + new Date().getTime() + '.xlsx';
+        if ('download' in document.createElement('a')) {
+            const elink = document.createElement('a');
+            elink.download = fileName;
+            elink.style.display = 'none';
+            elink.href = URL.createObjectURL(blob);
+            document.body.appendChild(elink);
+            elink.click();
+            URL.revokeObjectURL(elink.href);
+            document.body.removeChild(elink);
+        } else {
+            navigator.msSaveBlob(blob, fileName);
+        }
+    })
+}
+const exportOtherJyExcel = () => {
+    api.settlementApi.exportOtherJyExcel({
+
+    }).then((res: any) => {
+        const blob = new Blob([res], { type: 'application/vnd.ms-excel' });
+        const fileName = '跟单费应收非车险结算报表明细' + new Date().getTime() + '.xlsx';
+        if ('download' in document.createElement('a')) {
+            const elink = document.createElement('a');
+            elink.download = fileName;
+            elink.style.display = 'none';
+            elink.href = URL.createObjectURL(blob);
+            document.body.appendChild(elink);
+            elink.click();
+            URL.revokeObjectURL(elink.href);
+            document.body.removeChild(elink);
+        } else {
+            navigator.msSaveBlob(blob, fileName);
+        }
+    })
+}
+
 onMounted(() => {
     dictDetails();
     initCompany();

+ 2 - 2
src/views/receivable/handingFee/index.vue

@@ -694,7 +694,7 @@ const handleInvoice = () => {
 }
 const handleExport = () => {
     api.financeApi.exportSuperviseExcel({
-
+        agreementType: '2'
     }).then((res: any) => {
         const blob = new Blob([res], { type: 'application/vnd.ms-excel' });
         const fileName = '车险手续费应收明细' + new Date().getTime() + '.xlsx';
@@ -714,7 +714,7 @@ const handleExport = () => {
 }
 const handleExport1 = () => {
     api.financeApi.exportSuperviseJyExcel({
-
+        agreementType: '2'
     }).then((res: any) => {
         const blob = new Blob([res], { type: 'application/vnd.ms-excel' });
         const fileName = '非车险手续费应收明细' + new Date().getTime() + '.xlsx';

+ 94 - 4
src/views/receivable/handingFee/report.vue

@@ -202,7 +202,7 @@
                         <el-col :span="24" style="display: flex; justify-content: flex-end">
                             <el-button type="primary" @click="handleSearch(3)">查询</el-button>
                             <el-button plain type="primary" @click="handleReset(3)">重置</el-button>
-                            <el-button type="primary">导出明细</el-button>
+                            <el-button type="primary" @click="handleExport(3)">导出明细</el-button>
                         </el-col>
                     </el-row>
                 </el-form>
@@ -289,7 +289,7 @@
                         <el-col :span="24" style="display: flex; justify-content: flex-end">
                             <el-button type="primary" @click="handleSearch(4)">查询</el-button>
                             <el-button plain type="primary" @click="handleReset(4)">重置</el-button>
-                            <el-button type="primary">导出明细</el-button>
+                            <el-button type="primary" @click="handleExport(4)">导出明细</el-button>
                         </el-col>
                     </el-row>
                 </el-form>
@@ -452,7 +452,8 @@ const initData1 = () => {
         startTime: recordForm.value.time?.[0],
         endTime: recordForm.value.time?.[1],
         status: recordForm.value.status,
-        invoiceTypes: ['1','3']
+        invoiceTypes: ['1','3'],
+        agreementType: '2'
     }).then((res: any) => {
         if(res.code == 200) {
             recordData.value = res.data
@@ -521,6 +522,24 @@ const initData3 = (invoiceTypes) => {
 }
 
 const handleSearch = (type) => {
+    pages.vlaue = 1
+    size.value = 10
+    switch (type) {
+        case 1:
+            initData1()
+            break;
+        case 2:
+            initData2()
+            break;
+        case 3:
+            initData3(['1'])
+            break;
+        case 4:
+            initData3(['3'])
+            break;
+    }
+}
+const handleReset = (type) => {
     switch (type) {
         case 1:
             recordForm.value = {
@@ -563,9 +582,80 @@ const handleSearch = (type) => {
             break;
     }
 }
-const handleReset = (type) => {
+const handleExport = (type) => {
+    switch (type) {
+        case 2:
+            exportSuperviseSettlementExcel()
+            break;
+        case 3:
+            exportSuperviseSettlementDetailExcel()
+            break;
+        case 4:
+            exportSuperviseSettlementDetailJyExcel()
+            break;
+    }
+}
+const exportSuperviseSettlementExcel = () => {
+    api.settlementApi.exportSuperviseSettlementExcel({
+
+    }).then((res: any) => {
+        const blob = new Blob([res], { type: 'application/vnd.ms-excel' });
+        const fileName = '手续费应收结算报表明细' + new Date().getTime() + '.xlsx';
+        if ('download' in document.createElement('a')) {
+            const elink = document.createElement('a');
+            elink.download = fileName;
+            elink.style.display = 'none';
+            elink.href = URL.createObjectURL(blob);
+            document.body.appendChild(elink);
+            elink.click();
+            URL.revokeObjectURL(elink.href);
+            document.body.removeChild(elink);
+        } else {
+            navigator.msSaveBlob(blob, fileName);
+        }
+    })
+}
+const exportSuperviseSettlementDetailExcel = () => {
+    api.settlementApi.exportSuperviseSettlementDetailExcel({
 
+    }).then((res: any) => {
+        const blob = new Blob([res], { type: 'application/vnd.ms-excel' });
+        const fileName = '手续费应收车险结算报表明细' + new Date().getTime() + '.xlsx';
+        if ('download' in document.createElement('a')) {
+            const elink = document.createElement('a');
+            elink.download = fileName;
+            elink.style.display = 'none';
+            elink.href = URL.createObjectURL(blob);
+            document.body.appendChild(elink);
+            elink.click();
+            URL.revokeObjectURL(elink.href);
+            document.body.removeChild(elink);
+        } else {
+            navigator.msSaveBlob(blob, fileName);
+        }
+    })
 }
+const exportSuperviseSettlementDetailJyExcel = () => {
+    api.settlementApi.exportSuperviseSettlementDetailJyExcel({
+
+    }).then((res: any) => {
+        const blob = new Blob([res], { type: 'application/vnd.ms-excel' });
+        const fileName = '手续费应收非车险结算报表明细' + new Date().getTime() + '.xlsx';
+        if ('download' in document.createElement('a')) {
+            const elink = document.createElement('a');
+            elink.download = fileName;
+            elink.style.display = 'none';
+            elink.href = URL.createObjectURL(blob);
+            document.body.appendChild(elink);
+            elink.click();
+            URL.revokeObjectURL(elink.href);
+            document.body.removeChild(elink);
+        } else {
+            navigator.msSaveBlob(blob, fileName);
+        }
+    })
+}
+
 
 onMounted(() => {
     initData1();